简体   繁体   中英

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

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="sachinsingh@bsgroup.in";
             String to = "sachinsingh@bsgroup.in";
             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);
         }

     }
 }

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.

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

public class SendEmailServiceImpl extends Authenticator implements SendEmailService {

@Autowired
private TemplateEngine templateEngine;

private final static String id = "sachinsingh@gmail.com";
private final static String pw = "!@#$5678";

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();
    }
}
      public class SendEmailService {
                    private static final org.slf4j.Logger logger = LoggerFactory.getLogger(SendEmailService.class);

          public static void main(String args[]){
        sendingConfirmationMail.("sachinsingh@bsgroup.in","sachinsingh@bsgroup.in","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) {

                        }
                    }

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM