当前位置: 首页 > 面试题库 >

解决错误javax.mail.AuthenticationFailedException

堵泽宇
2023-03-14
问题内容

我不熟悉使用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;
    }
}

引发以下错误:

调试:setDebug:JavaMail版本1.4.1ea-SNAPSHOT

DEBUG: getProvider() returning

javax.mail.Provider[TRANSPORT,smtp,com.sun.mail.smtp.SMTPTransport,Sun
Microsystems, Inc]

调试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-8BITMIME

250-AUTH登录PLATINA XOAUTH XOAUTH2 PLAI-CLIENTTOKEN

250个增强的状态代码

250调音

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

调试SMTP:找到扩展名“ 8BITMIME”,arg“”

调试SMTP:找到扩展名“ AUTH”,arg“ LOGIN PLAIN XOAUTH XOAUTH2 PLAIN-CLIENTTOKEN”

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

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

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

身份登录

334 VXNlcm5hbWU6

YWNjb3VudEBibG9vbWluZy5jb20ubXk =

第334章

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

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]


问题答案:

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

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

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


 类似资料:
  • 我不熟悉这个功能在Java发送邮件。我收到一个错误时发送电子邮件重置密码。希望你能给我一个解决办法。 下面是我的代码: 引发以下错误: debug:setdebug:JavaMail版本1.4.1ea-snapshot 调试SMTP:useEhlo为true,useAuth为true 调试SMTP:正在尝试连接到主机“smtp.gmail.com”,端口465,isSSL false 220 mx

  • 本文向大家介绍解决 java.lang.NoSuchMethodError的错误,包括了解决 java.lang.NoSuchMethodError的错误的使用技巧和注意事项,需要的朋友参考一下 解决 java.lang.NoSuchMethodError的错误 1 原因 在项目依赖比较复杂或者 Java 运行的环境有问题时,或者同一类型的 jar 包有不同版本存在,都可能触发该错误。本质上说是

  • 现在我正在尝试从git运行克隆应用程序https://github.com/frinder/frinder-app但问题是该应用程序制作了很长时间,所以应该改变bulid.gradle 但是当我尝试相同的同步实现“com.android.支持:动画矢量可绘制:28.0.0”,但如果我删除它,请继续向我显示错误28.0.0它显示如下 但我不知道是什么造成了不完全相同的版本 这是应用程序build.g

  • 问题内容: 我们正在尝试使用VScode将代码部署到FRC机器人,但我们不断收到错误消息: 错误:找不到或加载主类 org.gradle.wrapper.GradleWrapperMain 原因:java.lang.ClassNotFoundException: org.gradle.wrapper.GradleWrapperMain 终端进程终止,退出代码为:1 我们发现其他人也遇到了类似的错误

  • 问题内容: 我连接了VPN,以设置广告资源API来获取产品列表,并且效果很好。一旦我从Web服务获得结果并绑定到UI。当我遇到付款错误时,我也将PayPal与我的make Express结帐应用程序集成在一起。我将servlet用于后端过程。谁能说出解决此问题的方法? 问题答案: 首先,你需要从尝试连接的服务器获取公共证书。这可以通过多种方式完成,例如联系服务器管理员并提出要求,使用OpenSSL

  • 我已经在swingeclipse的JTable属性中设计了默认的表模型。所以当我尝试进行计算时,会出现错误……线程“AWT-EventQueue-0”java.lang.ClassCastException:java.lang.String无法转换为java.lang.Integer 在-Integer quantity =((Integer)model . getvalue at(row,2))