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

2022-09-01 11:13:03

当我尝试使用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);
        }
    }
}

答案 1

我有同样的问题:我参考了这个链接,我已经按照以下步骤操作,它对我有用。

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

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

答案 2

给定的代码片段在我的Gmail帐户上运行良好,因此此问题存在于其他地方。您是否按照错误消息中给出的链接进行了操作?它包含以下提示:

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

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

如果您想在发送邮件时更加自由,我建议您寻找专用的邮件主机或设置自己的邮件服务器,例如Apache James或Microsoft Exchange。我已经在你之前的一个问题中详细回答了这个问题


推荐