Java com.sun.mail.smtp.SMTPAddressFailedException:收件人地址被拒绝:需要身份验证

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/3254804/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-08-13 17:48:05  来源:igfitidea点击:

com.sun.mail.smtp.SMTPAddressFailedException : Recipient address rejected: Authentication Required

java

提问by Sachin Singh

I am using following code but gettting error message as- run:

我正在使用以下代码,但在运行时收到错误消息:

javax.mail.SendFailedException: Invalid Addresses;
  nested exception is:
        com.sun.mail.smtp.SMTPAddressFailedException: 530 5.7.0 : Recipient address rejected: Authentication Required

        at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1607)
        at com.sun.mail.smtp.SMTPTransport.sendMessage(SMTPTransport.java:887)
        at javax.mail.Transport.send0(Transport.java:191)
        at javax.mail.Transport.send(Transport.java:120)
        at MailClient.sendMail(MailClient.java:55)
        at MailClient.main(MailClient.java:94)
Caused by: com.sun.mail.smtp.SMTPAddressFailedException: 530 5.7.0 : Recipient address rejected: Authentication Required

        at com.sun.mail.smtp.SMTPTransport.rcptTo(SMTPTransport.java:1505)
        ... 5 more

/**
 *
 * @author sachin
 */
import javax.mail.*;
 import javax.mail.internet.*;
 import javax.activation.*;
 import java.io.*;
 import java.util.Properties;

 public class MailClient
 {


     public void sendMail(String mailServer, String from, String to,
                             String subject, String messageBody
                             ) throws MessagingException, AddressException
     {
         // Setup mail server
         Properties props = System.getProperties();
         props.put("mail.smtp.host", mailServer);

         // Get a mail session
         Session session = Session.getDefaultInstance(props, null);

         // Define a new mail message
         Message message = new MimeMessage(session);
         message.setFrom(new InternetAddress(from));
         message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
         message.setSubject(subject);

         // Create a message part to represent the body text
         BodyPart messageBodyPart = new MimeBodyPart();
         messageBodyPart.setText(messageBody);

         //use a MimeMultipart as we need to handle the file attachments
         Multipart multipart = new MimeMultipart();

         //add the message body to the mime message
         multipart.addBodyPart(messageBodyPart);

         // add any file attachments to the message
         // addAtachments(attachments, multipart);

         // Put all message parts in the message
         message.setContent(multipart);

         // Send the message
         Transport.send(message);


     }

     protected void addAtachments(String[] attachments, Multipart multipart)
                     throws MessagingException, AddressException
     {
         for(int i = 0; i<= attachments.length -1; i++)
         {
             String filename = attachments[i];
             MimeBodyPart attachmentBodyPart = new MimeBodyPart();

             //use a JAF FileDataSource as it does MIME type detection
             DataSource source = new FileDataSource(filename);
             attachmentBodyPart.setDataHandler(new DataHandler(source));

             //assume that the filename you want to send is the same as the
             //actual file name - could alter this to remove the file path
             attachmentBodyPart.setFileName(filename);

             //add the attachment
             multipart.addBodyPart(attachmentBodyPart);
         }
     }

     public static void main(String[] args)
     {
         try
         {
             MailClient client = new MailClient();
             String server="smtp.bsgroup.in";
             String from="[email protected]";
             String to = "[email protected]";
             String subject="Test Mail";
             String message="Testing Mail";
          //  String[] filenames =
//{"c:\somefile.txt"};

             client.sendMail(server,from,to,subject,message);
         }
         catch(Exception e)
         {
             e.printStackTrace(System.out);
         }

     }
 }

回答by Luke Woodward

The error message you have received tells you that the SMTP server you have connected to requires authentication before you can use it to send an email, and that you haven't given it any authentication details.

您收到的错误消息告诉您,您所连接的 SMTP 服务器需要身份验证才能使用它来发送电子邮件,并且您没有为其提供任何身份验证详细信息。

See here (Internet Archive)for an example of how to send an email when the SMTP server requires authentication.

有关如何在 SMTP 服务器需要身份验证时发送电子邮件的示例,请参见此处 (Internet Archive)

回答by Byeon0gam

public class SendEmailServiceImpl extends Authenticator implements SendEmailService {

@Autowired
private TemplateEngine templateEngine;

private final static String id = "[email protected]";
private final static String pw = "!@#78";

private PasswordAuthentication pa;

public SendEmailServiceImpl() {
    pa = new PasswordAuthentication(id, pw);
}

public PasswordAuthentication getPasswordAuthentication() {
    return pa;
}

@Override
public void SendEmail(Person person, HttpServletRequest req, HttpServletResponse res) {
    String link = "";

    String contextPath = "http://" + req.getServerName() + ":" + req.getServerPort();


    WebContext ctx = new WebContext(req, res, req.getServletContext(),
            req.getLocale());


    Properties p = System.getProperties();
    p.put("mail.smtp.starttls.enable", "true");
    p.put("mail.smtp.host", "smtp.gmail.com");
    p.put("mail.smtp.auth", "true");
    p.put("mail.smtp.port", "587");

    Authenticator auth = new SendEmailServiceImpl();
    Session session = Session.getDefaultInstance(p, auth);
    MimeMessage msg = new MimeMessage(session);

    try {
        msg.setSentDate(new Date());
        InternetAddress from = new InternetAddress();
        from = new InternetAddress(id);

        msg.setFrom(from);
        InternetAddress to = new InternetAddress(person.getEmail());
        msg.setRecipient(Message.RecipientType.TO, to);

        link = contextPath + req.getContextPath() + "/checkToken/" + person.getToken();
        ctx.setVariable("tokenLink", link);
        String template = templateEngine.process("email/email_join", ctx);
        msg.setSubject("subject", "UTF-8");
        msg.setText(template, "UTF-8");

        msg.setHeader("content-Type", "text/html");

        javax.mail.Transport.send(msg);
        System.out.println("send email");

    } catch (AddressException addr_e) {
        addr_e.printStackTrace();
    } catch (MessagingException msg_e) {
        msg_e.printStackTrace();
    }
}

回答by user57

      public class SendEmailService {
                    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SendEmailService.class);

          public static void main(String args[]){
        sendingConfirmationMail.("[email protected]","[email protected]","password"
,"smtp.gmail.com","465");
//incase of zoho host,change into smtp.zoho.com

        }
                    public static void sendingConfirmationMail(String fromEmail, String userName, String password,
                 String toEmail, String sender_host,
                            String ssl_port) throws AddressException, MessagingException {
                        try {
                            // protocol properties
                        Properties props = System.getProperties();
                        props.setProperty("mail.smtps.host", sender_host);
                        props.setProperty("mail.smtp.port", ssl_port);
                        props.setProperty("mail.smtp.startssl.enable", "true");
                        props.setProperty("mail.smtps.auth", "true");
                        // close connection upon quit being sent
                        props.put("mail.smtps.quitwait", "false");
                        // Properties props=MailProperties(sender_host, ssl_port);
                        Session session = Session.getInstance(props, null);

                            final MimeMessage msg = new MimeMessage(session);
                            // set recipients and content
                            msg.setFrom(new InternetAddress(fromEmail));
                            msg.addRecipients(Message.RecipientType.TO, InternetAddress.parse(toEmail, false));

                            msg.setSubject("Test Mail");

                            msg.setContent("Testing Mail", "text/html; charset=utf-8");
                            msg.setSentDate(new Date());

                        Transport transport = session.getTransport("smtps");
                        transport.connect(sender_host, userName, password);
                        transport.sendMessage(msg, msg.getAllRecipients());
                        transport.close();
                        } catch (MessagingException e) {

                        }
                    }