尝试从 C# 应用程序连接到 Gmail 时出现身份验证错误,但没有安全警报电子邮件

Auth error trying to connect to Gmail from C# app, but no security alert email

我正在构建一个原型网站来向客户展示,并且需要连接到 Gmail 以访问电子邮件。为简单起见(因为这是原型),我尝试使用我创建的一次性 Gmail 帐户的电子邮件和密码进行连接。当我们(希望)获得完整应用程序的协议时,完全安全将在稍后出现。

我用的是Mailkit,代码如下...

  ImapClient client = new();
  await client.ConnectAsync("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
  await client.AuthenticateAsync(userName, password);

我第一次从本地计算机尝试此操作时,身份验证失败,并且向 Gmail 帐户发送了一封“安全警报”电子邮件,说有新设备已尝试登录。它让我可以选择检查 activity,并确认新设备确实是我。

在那之后,我能够运行从本地计算机毫无问题地获取代码。

另一位开发人员刚刚检查了我的更改并在他的机器上进行了尝试,但出现了身份验证失败的异常。可以理解,因为他的设备以前从未用于此目的。然而,这一次,Gmail 帐户没有收到“安全警报”电子邮件,因此他无法告诉 Google 他的设备是可信的。

然后我将该站点部署到测试服务器,但遇到了同样的问题。

有人知道为什么我们没有收到其他开发人员机器或测试服务器的“安全警报”电子邮件吗?更重要的是,知道我们如何告诉 Google 信任这两个设备吗?现阶段我没有资源将 OAuth 添加到此原型。

Imap日志如下所示。

谢谢

Imap日志

Connected to imaps://imap.gmail.com:993/
S: * OK Gimap ready for requests from 185.160.182.96 n14mb29765764wrp
C: A00000000 CAPABILITY
S: * CAPABILITY IMAP4rev1 UNSELECT IDLE NAMESPACE QUOTA ID XLIST CHILDREN X-GM-EXT-1 XYZZY SASL-IR AUTH=XOAUTH2 AUTH=PLAIN AUTH=PLAIN-CLIENTTOKEN AUTH=OAUTHBEARER AUTH=XOAUTH
S: A00000000 OK Thats all she wrote! n14mb29765764wrp
C: A00000001 AUTHENTICATE PLAIN AG5vd2l0c21pbmUyMDIwQGdtYWlsLmNvbQBIZXl5b3VBbmRtZTEy
S: * NO [WEBALERT https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbsNd6RU3LIlgDfhmL9Y7ywYhtagFig_xfuSJCUHD9Eg3XqN8DKlDk3G8jmj2w5viIm5PDC3BS4SVy7iFMB6g1244cnQt1E60EdOTSEpnqDzL6FH2L-ReOAyZ3qkSXZQZs2pIfL2] Web login required.
S: A00000001 NO [ALERT] Please log in via your web browser: https://support.google.com/mail/accounts/answer/78754 (Failure)

Gmail 具有此安全功能,它要求您先通过计算机上的网络浏览器登录,然后才能让您通过 IMAP 连接。

您可以通过转到 gmail 设置并为您的应用创建应用专用密码来解决此问题。

此外,MailKits 常见问题解答中有一节介绍了要更改哪些设置以允许“安全性较低的应用程序”进行身份验证。不确定您是否完成了这些步骤。

您还可以提交 MailKit 的功能请求以添加对 Gmail 的 [WEBALERT …] 响应代码的支持吗?快速浏览一下,我认为这可能是 MailKit 可以解析和发出事件的东西(在这种情况下它不会对你的应用有很大帮助,但无论如何可能有用吗?)