我正在构建一个原型网站来展示客户端,需要连接到Gmail才能访问电子邮件。为了简单起见(因为这是一个原型(,我正在尝试使用我创建的一次性Gmail帐户的电子邮件和密码进行连接。当我们(满怀希望(获得完整应用程序的协议时,完全安全性将在稍后到来。
我正在使用Mailkit,代码如下。。。
ImapClient client = new();
await client.ConnectAsync("imap.gmail.com", 993, SecureSocketOptions.SslOnConnect);
await client.AuthenticateAsync(userName, password);
我第一次在本地机器上尝试时,auth失败了;安全警报";电子邮件被发送到Gmail帐户,说有一个新设备试图登录。它让我可以选择检查活动,并确认新设备实际上是我。
在那之后,我就可以在本地机器上运行代码了。
另一位开发人员刚刚检查了我的更改,并在他的机器上进行了尝试,结果出现了auth失败的异常。这是可以理解的,因为他的设备以前从未用于此。然而,这一次,Gmail帐户没有收到";安全警报";电子邮件,所以他无法告诉谷歌他的设备值得信任。
然后我将该站点部署到测试服务器上,也遇到了同样的问题。
任何人都知道为什么我们没有得到一个";安全警报";为其他开发人员的机器或测试服务器发送电子邮件?更重要的是,你知道我们如何告诉谷歌相信这两款设备吗?在这个阶段,我没有资源将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设置并为你的应用程序创建一个特定于应用程序的密码来解决这个问题。
此外,MailKit常见问题解答中有一节介绍了为了允许"不太安全的应用程序"进行身份验证,需要更改哪些设置。不确定你是否已经完成了这些步骤。
你还可以为MailKit提交一个功能请求,以添加对Gmail[WEBALERT…]响应代码的支持吗?快速浏览一下,我认为这可能是MailKit可以解析并发出事件的东西(在这种情况下,这对你的应用程序没有那么大帮助,但无论如何可能有用?(