首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >解决错误javax.mail.AuthenticationFailedException

解决错误javax.mail.AuthenticationFailedException
EN

Stack Overflow用户
提问于 2013-09-13 12:17:50
回答 16查看 194.5K关注 0票数 41

我不熟悉这个用java发送邮件的函数。我在发送电子邮件以重置密码时遇到错误。希望你能给我一个解决方案。

下面是我的代码:

代码语言:javascript
复制
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;
    }
}

抛出以下错误:

调试: setDebug: JavaMail版本1.4.1ea-快照

调试: getProvider()返回javax.mail.ProviderTRANSPORT、smtp、com.sun.mail.smtp.SMTPTransport、Sun Microsystems,Inc.

DEBUG SMTP: useEhlo为真,useAuth为真

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

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

EHLO脂肪

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

250型- 35882577

250-8位

250-认证登录普通版XOAUTH XOAUTH2普通版-CLIENTTOKEN

250-增强统计代码

250分块

调试SMTP:找到扩展名"SIZE",参数"35882577“

调试SMTP:找到扩展"8BITMIME",参数"“

DEBUG SMTP:找到扩展名"AUTH",参数"LOGIN XOAUTH XOAUTH2 PLAIN CLIENTTOKEN“

调试SMTP:找到扩展"ENHANCEDSTATUSCODES",arg "“

调试SMTP:找到扩展"CHUNKING",arg "“

调试SMTP:尝试进行身份验证

身份验证登录

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

标准javax.mail.AuthenticationFailedException

Javax.mail.Service.connect的STDOUT (Service.java:319)

Javax.mail.Service.connect的STDOUT (Service.java:169)

com.vlee.util.mail.SendMail.sendMailAdvance(SendMail.java:283)的STDOUT

com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd(DoMemberLogin.java:251)的STDOUT

com.vlee.servlet.ecommerce.DoMemberLogin.doPost(DoMemberLogin.java:72)的STDOUT

EN

回答 16

Stack Overflow用户

回答已采纳

发布于 2013-09-13 12:48:00

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

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

代码语言:javascript
复制
Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});
票数 16
EN

Stack Overflow用户

发布于 2014-11-04 17:13:36

这个问题可能是由Gmail帐户保护引起的。只需单击下面的链接并禁用安全settings.It即可工作。https://www.google.com/settings/security/lesssecureapps

票数 82
EN

Stack Overflow用户

发布于 2015-05-02 19:32:05

通过

的安全设置

票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18778240

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档