解决错误javax.mail.AuthenticationFailedException

Fat*_* Az 33 java jakarta-mail

我不熟悉这个用java发送邮件的功能.发送电子邮件重置密码时收到错误.希望你能给我一个解决方案.

以下是我的代码:

public synchronized static boolean sendMailAdvance(String emailTo, String subject, String body)
{
    String host = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ADDRESS");
    String userName = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-USERNAME");
    String password = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PASSWORD");
    String port = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-PORT");
    String starttls = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-STARTTLS");
    String socketFactoryClass = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-SOCKET-CLASS");
    String fallback = AppConfigManager.getProperty("SENDER-EMAIL-SMTP-ALLOW-FALLBACK");                         

    try
    {
        java.util.Properties props = null;
        props = System.getProperties();
        props.put("mail.smtp.user", userName);
        props.put("mail.smtp.host", host);
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.debug", "true");

        if(!"".equals(port))
        {
            props.put("mail.smtp.port", port);
            props.put("mail.smtp.socketFactory.port", port);
        }

        if(!"".equals(starttls))
            props.put("mail.smtp.starttls.enable",starttls);

        if(!"".equals(socketFactoryClass))                   
            props.put("mail.smtp.socketFactory.class",socketFactoryClass);

        if(!"".equals(fallback))
            props.put("mail.smtp.socketFactory.fallback", fallback);

        Session session = Session.getDefaultInstance(props, null);
        session.setDebug(true);

        MimeMessage msg = new MimeMessage(session);
        msg.setFrom(new InternetAddress(userName));
        msg.setSubject(subject);                
        msg.setText(body, "ISO-8859-1");
        msg.setSentDate(new Date());
        msg.setHeader("content-Type", "text/html;charset=\"ISO-8859-1\"");
        msg.addRecipient(Message.RecipientType.TO, new InternetAddress(emailTo));
        msg.saveChanges();

        Transport transport = session.getTransport("smtp");
        transport.connect(host, userName, password);
        transport.sendMessage(msg, msg.getAllRecipients());
        transport.close();
            return true;
    }
    catch (Exception mex)
    {
        mex.printStackTrace();
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)

引发以下错误:

DEBUG:setDebug:JavaMail版本1.4.1ea-SNAPSHOT

DEBUG: getProvider() returning   javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun Microsystems, Inc]
Run Code Online (Sandbox Code Playgroud)

DEBUG SMTP:useEhlo true,useAuth true

DEBUG SMTP:尝试连接主机"smtp.gmail.com",端口465,isSSL false 220 mx.google.com ESMTP m4sm5929870pbg.38 - gsmtp

DEBUG SMTP:连接到主机"smtp.gmail.com",端口:465

EHLO fatin

250-mx.google.com为您服务,[175.139.198.14]

250-SIZE 35882577

250-8BITMIME

250-AUTH LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN

250 ENHANCEDSTATUSCODES

250 CHUNKING

DEBUG SMTP:找到扩展名"SIZE",arg"35882577"

DEBUG SMTP:找到扩展名"8BITMIME",arg""

DEBUG SMTP:找到扩展名"AUTH",arg"登录PLOA XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN"

DEBUG SMTP:找到扩展名"ENHANCEDSTATUSCODES",arg""

DEBUG SMTP:找到扩展名"CHUNKING",arg""

DEBUG SMTP:尝试进行身份验证

AUTH LOGIN

334 VXNlcm5hbWU6

YWNjb3VudEBibG9vbWluZy5jb20ubXk =

334 UGFzc3dvcmQ6

Ymxvb21pbmc = 535-5.7.8不接受用户名和密码.要了解详情,请访问535 5.7.8 http://support.google.com/mail/bin/answer.py?answer=14257

m4sm5929870pbg.38 - gsmtp

[STDOUT] javax.mail.AuthenticationFailedException

[STDOUT]在javax.mail.Service.connect(Service.java:319)

[STDOUT]在javax.mail.Service.connect(Service.java:169)

[STDOUT]在com.vlee.util.mail.SendMail.sendMailAdvance(SendMail.java:283)

[STDOUT] at com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd(DoMemberLogin.java:251)

[STDOUT]在com.vlee.servlet.ecommerce.DoMemberLogin.doPost(DoMemberLogin.java:72)

Raj*_*008 79

由Gmail帐户保护可能导致此问题.只需点击下面的链接并禁用安全设置即可. https://www.google.com/settings/security/lesssecureapps


Ani*_*ane 21


Ha *_*yen 14

您应该将端口更改为587,我测试了您的代码并且它工作正常

如果仍然发生错误,请将会话变量更改为以下代码:

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});
Run Code Online (Sandbox Code Playgroud)

  • 嗨我已将端口更改为587和会话代码,但仍然得到相同的错误如果我启用较少安全的应用程序:https://support.google.com/accounts/answer/6010255 https://www.google.com/ settings/security/lesssecureapps我能够接收邮件,但这不是解决方案,每个用户都不会启用此设置,如何处理此错误? (10认同)

小智 11

默认情况下,Gmail帐户具有高度安全性 当我们从非gmail工具使用gmail smtp时,电子邮件被阻止.要在我们的本地环境中进行测试,请将您的Gmail帐户设置为不太安全

  1. 登录Gmail.
  2. 访问网址为https://www.google.com/settings/security/lesssecureapps
  3. 选择"开启"


Saw*_*yae 8

大多数AuthenticationFieldException错误在登录尝试被阻止时发生,首先登录您的Gmail并转到https://www.google.com/settings/security/lesssecureapps 并检查打开.我这样解决了这个问题.


Mat*_*vić 5

如果您从新的应用程序或设备登录您的 Gmail 帐户,Google 可能会阻止该设备。尝试执行以下步骤:

为了保护您的帐户,如果我们怀疑不是您本人登录,Google 可能会更难登录您的帐户。例如,如果您正在旅行或尝试从新设备登录您的帐户,Google 可能会要求您提供除用户名和密码之外的其他信息。

从您之前用于访问 Google 帐户的其他设备转到https://g.co/allowaccess并按照说明进行操作。尝试从被阻止的应用程序重新登录。