gmail - 尝试从 C# 应用程序连接到 Gmail 时出现身份验证错误,但没有安全警报电子邮件
问题描述
我正在构建一个原型网站来展示客户,并且需要连接到 Gmail 以访问电子邮件。为简单起见(因为这是一个原型),我尝试使用我创建的一次性 Gmail 帐户的电子邮件和密码进行连接。当我们(希望)获得完整应用程序的协议时,全面的安全性将在稍后到来。
我正在使用Mailkit,代码如下...
ImapClient client = new();
await client.ConnectAsync("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
await client.AuthenticateAsync(userName, password);
我第一次在本地计算机上尝试此操作时,身份验证失败,并且向 Gmail 帐户发送了一封“安全警报”电子邮件,说有新设备尝试登录。它让我可以选择检查活动,并且确认新设备实际上是我。
之后,我可以毫无问题地从本地机器运行代码。
另一位开发人员刚刚检查了我的更改并在他的机器上进行了尝试,并得到了身份验证失败的异常。可以理解,因为他的设备以前没有用于此目的。但是,这一次,Gmail 帐户没有收到“安全警报”电子邮件,因此他无法告诉 Google 他的设备是值得信任的。
然后我将该站点部署到测试服务器,并遇到了同样的问题。
任何人知道为什么我们没有收到其他开发者机器或测试服务器的“安全警报”电子邮件吗?更重要的是,知道我们如何告诉 Google 信任这两种设备吗?在这个阶段,我没有资源将 OAuth 添加到这个原型中。
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 可以解析并发出事件的东西(在这种情况下它不会对您的应用程序有太大帮助,但无论如何可能有用吗?)
推荐阅读
- javascript - React 中的双面输入滑块,在达到初始范围 0 后,它也会向左移动并增加值,为什么?
- microsoft-graph-api - 是否有一个 api 端点来列出私人聊天中的文件?
- php - 如何更新存储为行的表列?
- android - 改造导致 Expected BEGIN_OBJECT 但在第 1 行第 153 列路径 $.joining 处为 STRING
- automation - 运行机器人框架脚本时,出现错误:默认适配器失败
- python - Django导出excel文件而不保存它
- stock - 库存表更新
- python - ModuleNotFoundError:没有名为“pandas”的模块(运行线性回归时)
- javascript - 如何将图像文件发布到 asp.net core 5 中的 api 控制器?(415 错误)
- python - 如何获得以下嵌套列表的 Treelib 表示?