简体   繁体   中英

JavaMail Error: javax.mail.AuthenticationFailedException

I am making a program that sends information to my email and I am taking reference from the given java code. But I am getting authentication failed error. Any one have an idea to send SMTP mail without allowing less secure from gmail and yahoo? Please help me out.

import javax.mail.*;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
import java.io.*;

public class Emailer
{

  private static final String SMTP_HOST_NAME = "smtp.live.com";
  private static final String SMTP_AUTH_USER = "mokee@live.com";
  private static final String SMTP_AUTH_PWD  = "spidermonkey";

  private static final String emailMsgTxt      = "Online Order Confirmation Message. Also include the Tracking Number.";
  private static final String emailSubjectTxt  = "HELEEEELEQWEWEQ!!!";
  private static final String emailFromAddress = "mokee@live.com";

  // Add List of Email address to who email needs to be sent to
  private static final String[] emailList = {"mokee@live.com"};

  public static void main(String emailBody) throws Exception
  {
    Emailer smtpMailSender = new Emailer();
    smtpMailSender.postMail( emailList, emailSubjectTxt, emailBody, emailFromAddress);
    System.out.println("Sucessfully Sent mail to All Users");
  }

  public void postMail( String recipients[ ], String subject, String message , String from) throws MessagingException {

     boolean debug = false;
     //Set the host smtp address
     Properties props = new Properties();
     props.put("mail.smtp.host", SMTP_HOST_NAME);
     props.put("mail.smtp.auth", "true");

    Authenticator auth = new SMTPAuthenticator();
    Session session = Session.getDefaultInstance(props, auth);

    session.setDebug(debug);

    // create a message
    Message msg = new MimeMessage(session);

    // set the from and to address
    InternetAddress addressFrom = new InternetAddress(from);
    msg.setFrom(addressFrom);

    InternetAddress[] addressTo = new InternetAddress[recipients.length];
    for (int i = 0; i < recipients.length; i++)
    {
        addressTo[i] = new InternetAddress(recipients[i]);
    }
    msg.setRecipients(Message.RecipientType.TO, addressTo);


    // Setting the Subject and Content Type
    msg.setSubject(subject);
    msg.setContent(message, "text/plain");
    Transport.send(msg);
 }


/**
* SimpleAuthenticator is used to do simple authentication
* when the SMTP server requires it.
*/
private class SMTPAuthenticator extends javax.mail.Authenticator
{
    private Session createSmtpSession() {
          final Properties props = new Properties();
          props.setProperty("mail.smtp.host", "smtp.live.com");
          props.setProperty("mail.smtp.auth", "true");
          props.setProperty("mail.smtp.port", "" + 587);
          props.setProperty("mail.smtp.starttls.enable", "true");
          // props.setProperty("mail.debug", "true");

          return Session.getDefaultInstance(props, new javax.mail.Authenticator() {

            protected PasswordAuthentication getPasswordAuthentication() {
              return new PasswordAuthentication("mokee@live.com", "spidermonkey");
            }
          });
        }
}

}

However, whenever I run this I get the following error message:

Exception in thread "main" javax.mail.AuthenticationFailedException: failed to connect, no password specified?
    at javax.mail.Service.connect(Service.java:329)
    at javax.mail.Service.connect(Service.java:176)
    at javax.mail.Service.connect(Service.java:125)
    at javax.mail.Transport.send0(Transport.java:194)
    at javax.mail.Transport.send(Transport.java:124)
    at client.Emailer.postMail(Emailer.java:102)
    at client.Emailer.main(Emailer.java:67)
    at client.RemoteFileClient.main(RemoteFileClient.java:28)

You have created

private Session createSmtpSession() 

But you did not use it.

Here is your solution.

public void postMail( String recipients[ ], String subject, String message , String from)
throws MessagingException {

Session session = null;

 Properties props = new Properties();

    props.setProperty("mail.smtp.host", SMTP_HOST_NAME );
    props.setProperty("mail.smtp.auth", "true");
    props.setProperty("mail.smtp.port", "" + 587);
    props.setProperty("mail.smtp.starttls.enable", "true");
    // props.setProperty("mail.debug", "true");

    session = Session.getInstance(props, new javax.mail.Authenticator() {

        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(SMTP_AUTH_USER,SMTP_AUTH_PWD);
        }
    });

session.setDebug(debug);

// create a message
Message msg = new MimeMessage(session);

// set the from and to address
InternetAddress addressFrom = new InternetAddress(from);
msg.setFrom(addressFrom);

InternetAddress[] addressTo = new InternetAddress[recipients.length];
for (int i = 0; i < recipients.length; i++)
{
    addressTo[i] = new InternetAddress(recipients[i]);
}
msg.setRecipients(Message.RecipientType.TO, addressTo);


// Setting the Subject and Content Type
msg.setSubject(subject);
msg.setContent(message, "text/plain");
Transport.send(msg);
}

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