当前位置: 首页 > 知识库问答 >
问题:

使用Gmail从Java发送邮件,无需打开不太安全的应用程序

贝浩歌
2023-03-14

我正在尝试使用Java向Gmail帐户发送邮件,代码如下。我似乎做的每件事都是正确的,但我收到了身份验证失败的消息。谷歌想让我打开“不太安全的应用”功能来实现传输。

有没有一种方法可以让Gmail对Java满意,并且不会出现“打开不太安全的应用程序”的错误?

错误:

javax.mail.AuthenticationFailedException: 534-5.7.14 <https://accounts.google.com/signin/continue?sarp=...U
534-5.7.14 FigguJaZwDtp...
534-5.7.14 ...o> Please log in via your web browser and
534-5.7.14 then try again.
534-5.7.14  Learn more at
534 5.7.14  https://support.google.com/mail/answer/... - gsmtp

代码:

String hostSmtpUser = "myemail@gmail.com";
String host = "smtp.gmail.com";
String hostPort = "587";
String hostSmtpPassword = "thepassword";

Properties properties = System.getProperties();
properties.setProperty("mail.smtp.user", hostSmtpUser);
properties.setProperty("mail.smtp.host", host);
properties.setProperty("mail.smtp.starttls.enable", "true");
properties.setProperty("mail.smtp.port", hostPort);
properties.setProperty("mail.smtp.auth", "true");

Session oSession;
if (true == ToolsCommon.isEmpty(hostSmtpUser))
    oSession = Session.getInstance(properties);
else
    oSession = Session.getInstance(properties, new javax.mail.Authenticator()
    {
        protected PasswordAuthentication getPasswordAuthentication()
        {
        return new PasswordAuthentication(hostSmtpUser, hostSmtpPassword);
        }
    });

// Compose the message  
try
{
    MimeMessage message = new MimeMessage(oSession);
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO, new InternetAddress(to));
    message.setSubject(Subject);
    message.setText(Body);

    // Send message  
    Transport.send(message);
}

catch (MessagingException ex)
{
    // Log the error.
    ToolsLog.logError(TypeLog.ui, ex);
}

我已经做了研究,所以据我所知,代码不是问题所在,只是没有看到一个解决方案,用于不太安全的应用程序消息。

参考文献:

参考文献1参考文献2参考文献3参考文献4

共有1个答案

锺离飞尘
2023-03-14

默认情况下,GMail不允许基于密码的身份验证——这就是为什么你必须允许“不太安全的应用”按原样使用你的程序。

相反,可以使用OAuth 2.0来避免直接使用密码。谷歌认为这种方法是安全的,不需要更改任何帐户设置。

 类似资料:
  • 我正在尝试使用php邮件从我的gmail帐户发送邮件。 我知道,为了使用php邮件程序发送邮件,我们需要从gmail帐户设置中启用“不太安全的应用程序”。 还有一个选项,在不启用“不太安全的应用程序”的情况下,我们可以通过启用两步验证从不太安全的应用程序发送邮件来使用“应用程序密码”。 但问题是使用“应用程序密码”,我无法发送来自php的邮件,邮件中出现用户名和密码不被接受的错误。 我搜索发现,我

  • 我想使用python 3.4脚本从我的gmail地址发送邮件。我使用以下代码: 如果我在我的gmail帐户中“允许不太安全的应用”,脚本就可以正常工作。然而,如果我禁用“不太安全的应用程序”,它将不起作用(我收到一封来自谷歌的警告电子邮件,其中“登录尝试被阻止”)。我想修改我的代码,以便能够在不启用此功能的情况下发送邮件。 我看了所有关于类似问题的问答,但没有找到任何有用的答案或方法。有人对此有解

  • 我使用Android Studio和这个库;https://github.com/yesidlazaro/GmailBackground . 我正在尝试从我的android应用程序发送电子邮件。但是每当我尝试从Gmail帐户发送电子邮件时,它都不起作用。因为谷歌将我的应用程序固定为“不太安全的应用程序”并阻止它。 我不得不从gmail的安全设置中允许不太安全的应用程序。但我不想这样做。我如何解决这

  • 应用属性: 此代码只能从gmail发送电子邮件(为不太安全的应用程序启用),它可以发送邮件,但我想要的是邮件应该发送任何公司id而不是gmail,尝试在此代码中添加其他电子邮件id,但错误为“用户名和密码不被接受”,有人能建议我需要做哪些更改才能使其适用于任何电子邮件id吗?请建议最佳方法(如有)?

  • 我研究了以下问题和答案:spring boot-无法连接到SMTP主机:SMTP.gmail.com,端口:25,响应:421 我想做同样的事情--用Gmail服务器从spring boot应用程序发送电子邮件。 我的配置是: 这是从另一个问题复制的,只有用户名和密码已经改变了我的需要。我的scienario唯一不同的是,电子邮件地址的域不是gmail.com。 我的电子邮件客户端类是: 我的例外