此程序尝试发送电子邮件但抛出运行时异常:
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对象.
您可以修改此接受用户名和密码,您可以将它们存储在那里,或者您想要的地方.
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));