简体   繁体   中英

Login failed with Javax.mail via google

I've been using the below code successfully from my laptop with recipients receiving the expected mail. However when putting the code in a jar and running from a hosted server. I get the below error.

Code

    Properties props = new Properties();  
    props.put("mail.smtp.host", "smtp.gmail.com");  
    props.put("mail.smtp.auth", "true");  
    props.put("mail.debug", "true");  
    props.put("mail.smtp.port", 465);  
    props.put("mail.smtp.socketFactory.port", 465);  
    props.put("mail.smtp.starttls.enable", "true");
    props.put("mail.smtp.ssl.enable", "true");
    props.put("mail.transport.protocol", "smtp");
    Session mailSession = null;

    mailSession = Session.getInstance(props,  
            new javax.mail.Authenticator() {  
        protected PasswordAuthentication getPasswordAuthentication() {  
            return new PasswordAuthentication("emailadress", "password");  
        }  
    }); 

    try {

        Transport transport = mailSession.getTransport();

        MimeMessage message = new MimeMessage(mailSession);

      message.setSubject("Todays Email!:");
      message.setFrom(new InternetAddress("theemailsender@gmail.com"));

      message.addRecipients(Message.RecipientType.TO, InternetAddress.parse("recipient1@gmail.com"));

      String body = theBody;
      message.setContent(body,"text/html");
      transport.connect();

        transport.sendMessage(message,message.getAllRecipients());
        transport.close();
    } catch (Exception exception) {

    }

Error

DEBUG SMTP: Found extension "SIZE", arg "35882577"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "CHUNKING", arg ""
DEBUG SMTP: STARTTLS requested but already using SSL
DEBUG SMTP: Attempt to authenticate using mechanisms: LOGIN PLAIN DIGEST-MD5 NTLM
DEBUG SMTP: AUTH LOGIN command trace suppressed
DEBUG SMTP: AUTH LOGIN failed

I'm assuming at this point that I've either got to have either startle.enable or ssl.enable set to true but not both.

This piece of code works for me, if it can help. You can remove the part related to attachments.

public static void sendEmailWithAttachments(String host, String port, final String userName,
    final String password, String toAddress, String subject, String message,
    String[] attachFiles)
throws AddressException, MessagingException {
    // sets SMTP server properties
    Properties properties = new Properties();
    properties.put("mail.smtp.host", host);
    properties.put("mail.smtp.port", port);
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");
    properties.put("mail.user", userName);
    properties.put("mail.password", password);

    // creates a new session with an authenticator
    Authenticator auth = new Authenticator() {
        public PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(userName, password);
        }
    };
    Session session = Session.getInstance(properties, auth);

    // creates a new e-mail message
    Message msg = new MimeMessage(session);

    msg.setFrom(new InternetAddress(userName));
    InternetAddress[] toAddresses = { new InternetAddress(toAddress) };
    msg.setRecipients(Message.RecipientType.TO, toAddresses);
    msg.setSubject(subject);
    msg.setSentDate(new Date());

    // creates message part
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    messageBodyPart.setContent(message, "text/html");

    // creates multi-part
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

    // adds attachments
    if (attachFiles != null && attachFiles.length > 0) {
        for (String filePath : attachFiles) {
            MimeBodyPart attachPart = new MimeBodyPart();

            try {
                attachPart.attachFile(filePath);
            } catch (IOException ex) {
                ex.printStackTrace();
            }

            multipart.addBodyPart(attachPart);
        }
    }

    // sets the multi-part as e-mail's content
    msg.setContent(multipart);

    // sends the e-mail
    Transport.send(msg);
}

In secure mode, you will probably have to replace port 465 by 587.

follow the following your issue hopefully resolved

  • First login into your gmail account then click on below path: google account

    in the security block, Just turned ON

    Allow less secure apps: ON

    Hope It will save your day..... Best of luck

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