javax.mail.AuthenticationFailedException:连接失败,没有指定密码?

前端之家收集整理的这篇文章主要介绍了javax.mail.AuthenticationFailedException:连接失败,没有指定密码?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
此程序尝试发送电子邮件但抛出运行时异常:
javax.mail.AuthenticationFailedException: Failed to connect,no password specified?

当我提供正确的用户名和密码进行身份验证时,为什么会收到此异常?

发件人和收件人都有g-mail帐户.发件人和收件人都有g-mail帐户.发件人已禁用两步验证过程.

这是代码

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

class tester {
    public static void main(String args[]) {
        Properties props = new Properties();
        props.put("mail.smtp.host","smtp.gmail.com");
        props.put("mail.stmp.user","username");

        //To use TLS
        props.put("mail.smtp.auth","true"); 
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.password","password");
        //To use SSL
        props.put("mail.smtp.socketFactory.port","465");
        props.put("mail.smtp.socketFactory.class","javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.auth","true");
        props.put("mail.smtp.port","465");


        Session session  = Session.getDefaultInstance( props,null);
        String to = "me@gmail.com";
        String from = "from@gmail.com";
        String subject = "Testing...";
        Message msg = new MimeMessage(session);
        try {
            msg.setFrom(new InternetAddress(from));
            msg.setRecipient(Message.RecipientType.TO,new InternetAddress(to));
            msg.setSubject(subject);
            msg.setText("Working fine..!");
            Transport transport = session.getTransport("smtp");
            transport.connect("smtp.gmail.com",465,"username","password");
            transport.send(msg);
            System.out.println("fine!!");
        }
        catch(Exception exc) {
            System.out.println(exc);
        }
    }
}

即使提供密码,我也得到例外.为什么不认证?

解决方法

尝试创建一个javax.mail.Authenticator对象,并将该属性对象发送到Session对象.

Authenticator
编辑:

您可以修改此接受用户名和密码,您可以将它们存储在那里,或者您想要的地方.

public class SmtpAuthenticator extends Authenticator {
public SmtpAuthenticator() {

    super();
}

@Override
public PasswordAuthentication getPasswordAuthentication() {
 String username = "user";
 String password = "password";
    if ((username != null) && (username.length() > 0) && (password != null) 
      && (password.length   () > 0)) {

        return new PasswordAuthentication(username,password);
    }

    return null;
}

在您发送电子邮件的课程中:

SmtpAuthenticator authentication = new SmtpAuthenticator();
javax.mail.Message msg = new MimeMessage(Session
                    .getDefaultInstance(emailProperties,authenticator));

猜你在找的Java相关文章