使用Gmail的JavaMail:535-5.7.1不接受用户名和密码

时间:2010-06-03 10:57:50

标签: java javamail

当我尝试使用JavaMail API发送邮件时出现此错误。我确信用户名和密码是100%正确的。我正在连接的Gmail帐户是一个旧帐户,因为他们说它需要时间来处理新帐户。

DEBUG SMTP RCVD: 535-5.7.1 Username and Password not accepted. Learn more at

535 5.7.1 http://mail.google.com/support/bin/answer.py?answer=14257 x35sm3011668
wfh.6

javax.mail.SendFailedException: Sending failed;
  nested exception is:
        javax.mail.AuthenticationFailedException
        at javax.mail.Transport.send0(Transport.java:218)
        at javax.mail.Transport.send(Transport.java:80)
        at Main.(Main.java:41)
        at Main.main(Main.java:51)

这是我的代码:

import javax.mail.*;
import javax.mail.internet.*;
import java.util.*;

public class Main
{
    String  d_email = "abc@gmail.com",
            d_password = "pass",
            d_host = "smtp.gmail.com",
            d_port  = "465",
            m_to = "abc@gmail.com",
            m_subject = "Testing",
            m_text = "testing email.";

    public Main()
    {
        Properties props = new Properties();
        props.put("mail.smtp.user", d_email);
        props.put("mail.smtp.host", d_host);
        props.put("mail.smtp.port", d_port);
        props.put("mail.smtp.starttls.enable","true");
        props.put("mail.smtp.auth", "true");
        props.put("mail.smtp.debug", "true");
        props.put("mail.smtp.socketFactory.port", d_port);
        props.put("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
        props.put("mail.smtp.socketFactory.fallback", "false");

        SecurityManager security = System.getSecurityManager();

        try
        {
            Authenticator auth = new SMTPAuthenticator();
            Session session = Session.getInstance(props, auth);
            session.setDebug(true);
            MimeMessage msg = new MimeMessage(session);
            msg.setText(m_text);
            msg.setSubject(m_subject);
            msg.setFrom(new InternetAddress(d_email));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
            Transport.send(msg);
        }
        catch (Exception mex)
        {
            mex.printStackTrace();
        } 
    }

    public static void main(String[] args)
    {
        Main blah = new Main();
    }

    private class SMTPAuthenticator extends javax.mail.Authenticator
    {
        public PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(d_email, d_password);
        }
    }
}

7 个答案:

答案 0 :(得分:8)

给定的代码段在我的Gmail帐户上正常运行,因此问题出在其他地方。你关注the link given in the error message了吗?它包含以下提示:

  
      
  • 确保您输入了完整的电子邮件地址(例如username@gmail.com)
  •   
  • 重新输入密码以确保密码正确无误。请记住,密码区分大小写。
  •   
  • 确保您的邮件客户端未设置为过于频繁地检查新邮件。如果您的邮件客户端每10分钟检查一次新邮件超过一次,您的客户端可能会反复请求您的用户名和密码。
  •   

特别是最后一点很重要。谷歌对此非常严格。如果您尝试以编程方式在一分钟内连接Gmail超过10次,那么您可能已被阻止。有一点耐心,一段时间后它会被解锁。

如果您希望更自由地发送邮件,我建议您寻找专用邮件主机或设置自己的邮件服务器,例如Apache James或Microsoft Exchange。在之前的一个问题中,我已经answered this in detail了。

答案 1 :(得分:8)

我有同样的问题: 我指的是这个link,我按照以下步骤为我工作。

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

  1. 登录Gmail。
  2. https://www.google.com/settings/security/lesssecureapps的身份访问URL
  3. 选择“打开”

答案 2 :(得分:7)

我遇到了完全相同的问题,对我来说原因是我在我的Gmail帐户上打开了2-step verification

生成一个新的特定于应用程序的密码并在我的java应用程序中使用它后,这个“535 5.7.1”问题就消失了。

您可以在official google guide之后生成新的应用专用密码。

答案 3 :(得分:1)

我有相同的错误消息,这就是我解决问题的方法,

创建应用密码:以下是我们生成应用密码的方法,

1. Visit your App passwords page. You may be asked to sign in to your Google Account.

2. At the bottom, click Select app and choose the app you’re using.
Click Select device and choose the device you’re using.

3. Select Generate.

4. Follow the instructions to enter the App password (the 16 character code in the yellow bar) on your device.

5. Select Done.

我为一个Spring启动应用程序工作,我得到的应用密码为sadsadaffferere,电子邮件地址为xyz@gmail.com。因此,我需要配置以下应用程序属性

# the email settings
# ------------------
spring.mail.host=smtp.gmail.com
spring.mail.username=xyz@gmail.com
spring.mail.password=sadsadaffferere
spring.mail.properties.mail.smtp.auth=true
spring.mail.properties.mail.smtp.socketFactory.port=465
spring.mail.properties.mail.smtp.socketFactory.class=javax.net.ssl.SSLSocketFactory
spring.mail.properties.mail.smtp.socketFactory.fallback=false
support.email=xyz@gmail.com

之后一切正常

答案 4 :(得分:0)

尽管我的用户名和密码正确,但是我也遇到了同样的问题,但是在我的Gmail帐户中启用了 缺乏安全的应用访问权限 后,我能够通过春季启动发送电子邮件应用。

答案 5 :(得分:0)

如果相同的凭据更早地起作用并且停止了工作,则此问题的主要原因是gmail客户端上的密码不匹配/已更改,并且在Jenkins或其他CI服务器上未更新。如果不是这种情况,请检查@BalusC提到的原因

答案 6 :(得分:0)

您需要在gmail设置中打开“允许的不太安全的应用程序”。