我正在使用sendMail
进行Servlet
JavaMail
。我的输出有javax.mail.AuthenticationFailedException
。有人可以帮帮我吗?感谢。
sendMailServlet代码:
try {
String host = "smtp.gmail.com";
String from = "my@gmail.com";
String pass = "pass";
Properties props = System.getProperties();
props.put("mail.smtp.starttls.enable", "true");
props.put("mail.smtp.host", host);
props.put("mail.smtp.user", from);
props.put("mail.smtp.password", pass);
props.put("mail.smtp.port", "587");
props.put("mail.smtp.auth", "true");
props.put("mail.debug", "true");
Session session = Session.getDefaultInstance(props, null);
MimeMessage message = new MimeMessage(session);
Address fromAddress = new InternetAddress(from);
Address toAddress = new InternetAddress("test1@gmail.com");
message.setFrom(fromAddress);
message.setRecipient(Message.RecipientType.TO, toAddress);
message.setSubject("Testing JavaMail");
message.setText("Welcome to JavaMail");
Transport transport = session.getTransport("smtp");
transport.connect(host, from, pass);
message.saveChanges();
Transport.send(message);
transport.close();
}catch(Exception ex){
out.println("<html><head></head><body>");
out.println("ERROR: " + ex);
out.println("</body></html>");
}
GlassFish 2.1上的输出:
DEBUG SMTP: trying to connect to host "smtp.gmail.com", port 587, isSSL false
220 mx.google.com ESMTP 36sm10907668yxh.13
DEBUG SMTP: connected to host "smtp.gmail.com", port: 587
EHLO platform-4cfaca
250-mx.google.com at your service, [203.126.159.130]
250-SIZE 35651584
250-8BITMIME
250-STARTTLS
250-ENHANCEDSTATUSCODES
250 PIPELINING
DEBUG SMTP: Found extension "SIZE", arg "35651584"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "STARTTLS", arg ""
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
STARTTLS
220 2.0.0 Ready to start TLS
EHLO platform-4cfaca
250-mx.google.com at your service, [203.126.159.130]
250-SIZE 35651584
250-8BITMIME
250-AUTH LOGIN PLAIN
250-ENHANCEDSTATUSCODES
250 PIPELINING
DEBUG SMTP: Found extension "SIZE", arg "35651584"
DEBUG SMTP: Found extension "8BITMIME", arg ""
DEBUG SMTP: Found extension "AUTH", arg "LOGIN PLAIN"
DEBUG SMTP: Found extension "ENHANCEDSTATUSCODES", arg ""
DEBUG SMTP: Found extension "PIPELINING", arg ""
DEBUG SMTP: Attempt to authenticate
AUTH LOGIN
334 VXNlcm5hbWU6
aWpveWNlbGVvbmdAZ21haWwuY29t
334 UGFzc3dvcmQ6
MTIzNDU2Nzhf
235 2.7.0 Accepted
DEBUG: getProvider() returning javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
DEBUG SMTP: useEhlo true, useAuth true
答案 0 :(得分:20)
您需要实施自定义Authenticator
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
class GMailAuthenticator extends Authenticator {
String user;
String pw;
public GMailAuthenticator (String username, String password)
{
super();
this.user = username;
this.pw = password;
}
public PasswordAuthentication getPasswordAuthentication()
{
return new PasswordAuthentication(user, pw);
}
}
现在在Session
Session session = Session.getInstance(props, new GMailAuthenticator(username, password));
另请查看JavaMail FAQ
答案 1 :(得分:20)
Hello Everyone此错误来自Google安全... 这可以通过降低安全性来解决。
转到此链接:&#34; https://www.google.com/settings/security/lesssecureapps&#34;并使#34;开启&#34;然后你的应用程序运行肯定。
答案 2 :(得分:2)
我在下面一行
中遗漏了这个验证者对象参数Session session = Session.getInstance(props, new GMailAuthenticator(username, password));
此行解决了我的问题,现在我可以通过我的Java应用程序发送邮件了。 其余代码很简单,如上所述。
答案 3 :(得分:0)
问题是,您正在创建一个transport
对象并使用它的connect方法对自己进行身份验证。
但是,然后使用static
方法发送忽略对象完成的身份验证的消息。
因此,您应该在对象上使用sendMessage(message, message.getAllRecipients())
方法,或者使用其他人建议的身份验证器来获取授权
通过会议。
这是Java Mail FAQ,您需要阅读。
答案 4 :(得分:0)
只想与您分享:
更改数字海洋机器(IP地址)后,我碰巧遇到此错误。显然,Gmail认为这是一次黑客攻击。遵循他们的指示并批准新的IP地址后,代码又恢复运行。
答案 5 :(得分:0)
当您尝试从新设备或应用程序登录Google帐户时,必须解锁验证码。 要解锁验证码,请转到https://www.google.com/accounts/DisplayUnlockCaptcha 然后