谷歌禁用“不安全应用程序”有解决办法吗?

34

自5月31日以来,谷歌已禁用“较不安全的应用程序”选项,因此我一直在使用Java邮件API,由于更新,我无法再使用Gmail SMTP发送电子邮件。

以下是我收到的错误:

javax.mail.AuthenticationFailedException: 535-5.7.8 Username and Password not accepted. Learn more at
535 5.7.8  https://support.google.com/mail/?p=BadCredentials n13-20020a5d400d000000b0020ff7246934sm4970874wrp.95 - gsmtp

我换成了Outlook邮箱,它似乎运作良好,但我想知道是否有一种方法可以使用Gmail帐户。

不安全的应用程序和你的Google帐户


请调整您的代码并使用oAuth2进行身份验证:https://javaee.github.io/javamail/OAuth2 - Robert
5个回答

41

您可以尝试通过“应用密码”进行身份验证。

在您的Google账户上:

  1. 开启两步验证

  2. 创建一个16位字符的“应用密码”(如何创建应用密码)-> 结果应类似于:16位字符的“应用密码”

  3. 使用16位字符的密码代替Google账户密码

MailMessage mail = new MailMessage();
foreach (string receiver in DolociPrejemnike())
    mail.To.Add(receiver);
mail.From = new MailAddress("app_gmail@gmail.com", "No replay"); //pošiljatelj (vedno enak)
mail.Subject = SetSubject();
mail.Body = SetBody();
mail.IsBodyHtml = true;

SmtpClient smtp = new SmtpClient();
smtp.Host = "smtp.gmail.com";
smtp.Port = 587;
smtp.UseDefaultCredentials = true;
smtp.Credentials = new System.Net.NetworkCredential("app_gmail@gmail.com", "xtqapucsmyvqmvxp"); // Enter seders User name and password  
smtp.EnableSsl = true;
smtp.Send(mail);

3
是的,我也成功地完成了这个操作。你所需要做的就是创建一个新密码,然后用它替换你的凭据即可。其他所有内容都可以保持不变。不必使用xoauth2。 - TheStoryCoder
1
这应该是被接受的答案,此外,谷歌推荐使用“应用程序密码”作为不太安全的应用程序的替代方案。 - Norielle Cruz
2
如果代码示例是Java而不是.Net,那就完美了。 - ManoDestra
1
这是解决方案。 - Jordan Miguel

6

现在你无法再使用登录名和密码连接Google的SMTP服务器,唯一的选择就是使用XOauth2

我以前没有使用过Jakarta,但它似乎支持它。 你应该看看OAuth2支持

Properties props = new Properties();
props.put("mail.imap.ssl.enable", "true"); // required for Gmail
props.put("mail.imap.auth.mechanisms", "XOAUTH2");
Session session = Session.getInstance(props);
Store store = session.getStore("imap");
store.connect("imap.gmail.com", username, oauth2_access_token);

应用程序密码

第二种选择是进入您的 Google 帐户并生成一个 应用程序密码

运行代码时,请使用生成的密码代替实际用户密码。主要问题在于无法确定谷歌将继续支持应用程序密码的时间。


如何在谷歌禁用“较不安全的应用程序”后发送电子邮件?因为IMAP无法“发送”电子邮件。 - ajinzrathod
不必使用此方法。按照其他答案中所述的“应用程序密码”即可。 - TheStoryCoder
你确定谷歌会继续支持应用程序密码吗?Xoauth2选项是更安全的选择。 - Linda Lawton - DaImTo
@DalmTo 谷歌建议使用“应用程序密码”,不必担心支持问题,如果发生这种情况,他们可以使用其他方法。我相信这将需要数年时间。 - Norielle Cruz

6

感谢所有的回复!我通过以下方法解决了这个问题:

我启用了“Windows设备的应用程序密码”,然后将密码从电子邮件密码更改为Google生成的密码

并将代码更改为以下内容:

public class JavaMailUtil {
public static void sendMail(String recepient,String order) throws Exception {

    Properties properties=new Properties();
    properties.put("mail.smtp.auth", "true");
    properties.put("mail.smtp.starttls.enable", "true");
    properties.put("mail.smtp.host", "smtp.gmail.com");
    properties.put("mail.smtp.port", "587");
    String myAccountEmail="yourEmailAddress@gmail.com";
    String password="Generated Windows machine password from google";
    Session session=Session.getInstance(properties, new Authenticator() {
        @Override
        protected PasswordAuthentication getPasswordAuthentication() {
            return new PasswordAuthentication(myAccountEmail, password);
        }
    });
    
    Message message=prepareMessage(session,myAccountEmail,recepient,order);
    Transport.send(message);
    System.out.println("Message Sent successfully");
}

private static Message prepareMessage(Session session,String from,String to,String orderInfo) {
    Message message = new MimeMessage(session);
    try {
        
        message.setFrom(new InternetAddress(from));
        message.setRecipient(Message.RecipientType.TO, new InternetAddress(to));a
        message.setSubject("Your subject here");
        message.setText(");
        return message;
    } catch (AddressException e) {
        e.printStackTrace();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return null;
}

}


1

看起来,他们正在积极地让人们摆脱App密码,因为该选项不再列在“账户/安全”下面。我找到的链接访问应用程序密码管理页面与您指示的略有不同,它只是https://myaccount.google.com/apppasswords。 - Alan

0
对于那些遵循其他答案但在使用应用程序密码时仍然收到“认证失败”错误的人,一个关键点是,如果您正在使用XOAUTH2或遵循建议使用oauth2,则此解决方案不适用。
因此,在以下代码中:
props.put("mail.imap.auth.mechanisms", "XOAUTH2");

只需将其更改为以下内容:

props.put("mail.imap.auth.mechanisms", "XOAUTH");

它应该能够正常工作,同时保持其他所有内容不变。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接