问题描述
我在我的 WPF C# 应用程序中使用推荐的 MailKit.Net.Smtp 类,其中用户(客户端)通过单击按钮从专用 Gmail 发送日志文件和向专用 Gmail 发送日志文件。但是当我在朋友的电脑上尝试时,我得到了一个例外。 (我遇到 this 和 this 问题,但就我而言,我不知道如何将它用于 C#)
我使用的代码:
using (var client = new SmtpClient())
{
try
{
client.SslProtocols = SslProtocols.Ssl3 | SslProtocols.Tls | SslProtocols.Tls11 | SslProtocols.Tls12;
client.Connect("smtp.gmail.com",465,true);
client.AuthenticationMechanisms.Remove("XOAUTH2");
client.Authenticate(login,password);
client.Send(message);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
throw;
}
finally
{
client.disconnectAsync(true);
client.dispose();
}
}
这是记录的异常:
Warning: 534: 5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbt
5.7.14 M0QLqwGEsymkDwo_w1PdtomM64NjeHlfRTxHSCRLrHD4dWryXDkqTLottdXp3j_w0jh5x
5.7.14 23oVaJfk24KAG9mFqOrGF1US1WDZx2PRou0xeN9x9s3iRl9Ash2T54rY_wMpsVtw>
5.7.14 Please log in via your web browser and then try again.
5.7.14 Learn more at
5.7.14 https://support.google.com/mail/answer/78754 t17sm1641881ljt.1 - gsmtp: MailKit.Security.AuthenticationException: 534: 5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbt
5.7.14 M0QLqwGEsymkDwo_w1PdtomM64NjeHlfRTxHSCRLrHD4dWryXDkqTLottdXp3j_w0jh5x
5.7.14 23oVaJfk24KAG9mFqOrGF1US1WDZx2PRou0xeN9x9s3iRl9Ash2T54rY_wMpsVtw>
5.7.14 Please log in via your web browser and then try again.
5.7.14 Learn more at
5.7.14 https://support.google.com/mail/answer/78754 t17sm1641881ljt.1 - gsmtp ---> MailKit.Net.Smtp.SmtpCommandException: 5.7.14 <https://accounts.google.com/signin/continue?sarp=1&scc=1&plt=AKgnsbt
5.7.14 M0QLqwGEsymkDwo_w1PdtomM64NjeHlfRTxHSCRLrHD4dWryXDkqTLottdXp3j_w0jh5x
5.7.14 23oVaJfk24KAG9mFqOrGF1US1WDZx2PRou0xeN9x9s3iRl9Ash2T54rY_wMpsVtw>
5.7.14 Please log in via your web browser and then try again.
5.7.14 Learn more at
5.7.14 https://support.google.com/mail/answer/78754 t17sm1641881ljt.1 - gsmtp
--- End of inner exception stack trace ---
at MailKit.Net.Smtp.SmtpClient.<AuthenticateAsync>d__87.MoveNext()
--- End of stack trace from prevIoUs location where exception was thrown ---
at System.Runtime.CompilerServices.TaskAwaiter.ThrowForNonSuccess(Task task)
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MailKit.Net.Smtp.SmtpClient.Authenticate(Encoding encoding,ICredentials credentials,CancellationToken cancellationToken)
at MailKit.MailService.Authenticate(Encoding encoding,String userName,String password,CancellationToken cancellationToken)
at Cont.MainWindow.SendEmailFromClient() 6/28/2021 9:40:27 PM
现在我的 WPF 应用程序可能在世界的另一个地方运行,我需要接收日志文件并修复此发送错误。我已经打开了“允许安全性较低的应用程序”并且能够从我的计算机接收电子邮件。但不知何故,这还不够。
解决方法
日志中来自服务器的错误消息准确地告诉您需要做什么。您需要从要连接到 SMTP 的机器(在本例中为您朋友的机器)登录 Google Mail。
这是 Google 的一项安全预防措施,在您首次通过网络浏览器登录之前,它不会让您通过 SMTP 服务器进行身份验证。
您或许可以通过使用特定于应用的密码来解决此问题。您可以在 Google Mail 设置中的某处为此目的生成应用专用密码。