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

新手上路,请多包涵

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

DEBUG SMTP RCVD:535-5.7.1 不接受用户名和密码。了解更多信息

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

javax.mail.SendFailedException:发送失败;
  嵌套异常是:
        javax.mail.AuthenticationFailedException
        在 javax.mail.Transport.send0(Transport.java:218)
        在 javax.mail.Transport.send(Transport.java:80)
        在 Main.(Main.java:41)
        在 Main.main(Main.java:51)

这是我的代码:

导入 javax.mail.*;
导入 javax.mail.internet.*;
导入 java.util.*;

公开课主要
{
    String d_email = "abc@gmail.com",
            d_password = "通过",
            d_host = "smtp.gmail.com",
            d_port = "465",
            m_to = "abc@gmail.com",
            m_subject = "测试",
            m_text = "测试邮件。";

    公共主要()
    {
        属性 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 安全 = System.getSecurityManager();

        尝试
        {
            验证器 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(新的互联网地址(d_email));
            msg.addRecipient(Message.RecipientType.TO, new InternetAddress(m_to));
            运输。发送(味精);
        }
        赶上(墨西哥例外)
        {
            mex.printStackTrace();
        }
    }

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

    私有类 SMTPAuthenticator 扩展了 javax.mail.Authenticator
    {
        公共密码认证 getPasswordAuthentication()
        {
            返回新的 PasswordAuthentication(d_email, d_password);
        }
    }
}

原文由 simplyblue 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 726
2 个回答

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

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

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

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

原文由 BalusC 发布,翻译遵循 CC BY-SA 3.0 许可协议

我遇到了同样的问题:我参考了此 链接,我已按照以下对我有用的步骤进行操作。

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

  1. 登录 Gmail。
  2. 访问 URL 作为 https://www.google.com/settings/security/lesssecureapps
  3. 选择“开启”

原文由 Gautam 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题