Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/cmake/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
解决错误javax.mail.AuthenticationFailedException_Java_Jakarta Mail - Fatal编程技术网

解决错误javax.mail.AuthenticationFailedException

解决错误javax.mail.AuthenticationFailedException,java,jakarta-mail,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

我不熟悉用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 true,useAuth true

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

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

埃洛·法廷

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

250号35882577

250-8比特

250-AUTH登录普通XOAUTH XOAUTH2普通CLIENTTOKEN

250-增强状态码

250分块

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

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

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

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

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

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

身份验证登录

334 VXNlcm5hbWU6

YWNJB3VUDIBG9VBWLUZY5JB20UBXK=

334 UGFzc3dvcmQ6

Ymxvb21pbmc= 535-5.7.8不接受用户名和密码。了解更多信息,请访问 535.7.8

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]位于com.vlee.servlet.ecommerce.DoMemberLogin.fnSendPwd(DoMemberLogin.java:251)

[STDOUT]位于com.vlee.servlet.ecommerce.domenberlogin.doPost(domenberlogin.java:72)


你的gmail smtp设置错误。Gmail需要SSL。请参阅有关如何通过Gmail SMTP通过Java发送电子邮件的教程,例如:

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

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

Session session = Session.getInstance(props, new javax.mail.Authenticator() {
    protected PasswordAuthentication getPasswordAuthentication() {
        return new PasswordAuthentication(userName, password);
    }
});
2个可能的原因:

  • 您的用户名可能需要完整的电子邮件id'username@example.com"
  • 最明显的是:密码错误。调试以查看所使用的密码是否正确

    • 这个问题可能是由Gmail帐户保护引起的。只需单击下面的链接并禁用安全设置。它将正常工作。

      • 转到您的帐户并打开安全设置,它将起作用

      大多数AuthenticationFieldException错误发生在尝试阻止登录时,请先登录您的gmail,然后转到并选中“打开”。我是这样解决这类问题的

      以防万一有人来找这个问题的解决方案


      通过为使用中的帐户激活google 2步验证并创建特定于应用程序的密码,可以缓解身份验证问题。我遇到了与OP相同的问题。启用两步操作有效。

      我长期以来一直遇到相同的错误

      当我将会话调试更改为true时

      Session session = Session.getDefaultInstance(props, new GMailAuthenticator("xxxxx@gmail.com", "xxxxx"));
      session.setDebug(true);
      
      我从控制台获得了帮助url以及javax.mail.AuthenticationFailedException

      从链接中的步骤开始,我遵循每个步骤。当我用字母、数字和符号混合更改密码时,我惊讶地发现,生成的电子邮件没有身份验证例外

      注意:我的旧密码不太安全。

      更改此密码(设置不太安全的应用程序):

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

      为了保护你的帐户,如果我们怀疑不是你,谷歌可能会让登录你的帐户变得更加困难。例如,如果您正在旅行或试图从新设备登录您的帐户,Google可能会要求您提供用户名和密码以外的其他信息

      从以前用于访问Google帐户的其他设备转到,然后按照说明操作。
      尝试从被阻止的应用程序再次登录。

      我也有此问题,但解决方案与编码无关。确保您能够连接到gmail。Ping smtp.gmail.com。如果您没有收到回复,请检查防火墙设置。这也可能是代理设置问题。

      默认情况下,Gmail帐户是高度安全的。当我们使用非gmail工具的gmail smtp时,电子邮件被阻止。要在本地环境中进行测试,请尽可能降低您的gmail帐户的安全性

    • 登录到Gmail
    • 访问URL作为
    • 选择“打开”

    • 对我有效的解决方案有两个步骤

    • 第一步

      package com.student.mail;
      
      import java.util.Properties;
      
      import javax.mail.Authenticator;
      import javax.mail.Message;
      import javax.mail.MessagingException;
      import javax.mail.PasswordAuthentication;
      import javax.mail.Session;
      import javax.mail.Transport;
      import javax.mail.internet.InternetAddress;
      import javax.mail.internet.MimeMessage;
      
      /**
       *
       * @author jorge santos
       */
      public class GoogleMail {
          public static void main(String[] args) {
              Properties props = new Properties();
              props.put("mail.smtp.host", "smtp.gmail.com");
              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,
              new javax.mail.Authenticator() {
                                  @Override
                  protected PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication("conaderindicadores@gmail.com","Silueta95#");
                  }
              });
      
          try {
      
              Message message = new MimeMessage(session);
              message.setFrom(new InternetAddress("conaderindicadores@gmail.com"));
              message.setRecipients(Message.RecipientType.TO,
                      InternetAddress.parse("netneillip@gmail.com"));
              message.setSubject("Testing Subject");
              message.setText("Test Mail");
      
              Transport.send(message);
      
              System.out.println("Done");
      
          } catch (MessagingException e) {
              throw new RuntimeException(e);
          }
      }
      
      }
      
    • 启用gmail安全性

      https://myaccount.google.com/u/2/lesssecureapps?pli=1&pageId=none
      

    • 有几个步骤你必须记住

      • 首先,确保您已关闭谷歌帐户的双向身份验证
      • 第二,允许访问不太安全的应用程序-
      现在有两种情况 如果您在本地计算机上开发它,请在浏览器中登录到您的google帐户,这样google就可以识别该计算机


      如果您已将应用程序部署到服务器上,那么在第一次请求之后,您将收到一个身份验证错误,因此您必须授予对服务器的访问权,只需转到此处授予访问权-

      这是什么?几行代码?你能描述一下代码、行为以及它为什么对OP有帮助吗?嗨,我已经将端口更改为587,会话代码也更改了,但是如果启用不太安全的应用程序,仍然会出现相同的错误:我可以接收邮件,但这不是解决方案,每个用户都不会启用此设置,如何处理这个错误?@HaNguyen嘿,先生,我面临着同样的问题,我已经尝试了你上面的代码,但是没有帮助,请像@dheerajkuma先生一样检查这个
      package com.student.mail;
      
      import java.util.Properties;
      
      import javax.mail.Authenticator;
      import javax.mail.Message;
      import javax.mail.MessagingException;
      import javax.mail.PasswordAuthentication;
      import javax.mail.Session;
      import javax.mail.Transport;
      import javax.mail.internet.InternetAddress;
      import javax.mail.internet.MimeMessage;
      
      /**
       *
       * @author jorge santos
       */
      public class GoogleMail {
          public static void main(String[] args) {
              Properties props = new Properties();
              props.put("mail.smtp.host", "smtp.gmail.com");
              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,
              new javax.mail.Authenticator() {
                                  @Override
                  protected PasswordAuthentication getPasswordAuthentication() {
                      return new PasswordAuthentication("conaderindicadores@gmail.com","Silueta95#");
                  }
              });
      
          try {
      
              Message message = new MimeMessage(session);
              message.setFrom(new InternetAddress("conaderindicadores@gmail.com"));
              message.setRecipients(Message.RecipientType.TO,
                      InternetAddress.parse("netneillip@gmail.com"));
              message.setSubject("Testing Subject");
              message.setText("Test Mail");
      
              Transport.send(message);
      
              System.out.println("Done");
      
          } catch (MessagingException e) {
              throw new RuntimeException(e);
          }
      }
      
      }
      
      https://myaccount.google.com/u/2/lesssecureapps?pli=1&pageId=none