我正在尝试创建一个应用程序,在客户购买时向他们发送电子邮件。我们有自己的GMail帐户,我将使用它来发送电子邮件。
我已经设置了我的应用程序,并在Google API控制台中创建了凭据。我在MailKit的GitHub上发现了这个问题,看起来这是一个足够简单的方法,但对我似乎并没有起作用。
这是我的代码:
var secrets = new ClientSecrets
{
ClientId = [CLIENTID]
ClientSecret = [SECRET]
};
var googleCredentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, new[] { GmailService.Scope.MailGoogleCom }, email, CancellationToken.None);
await googleCredentials.RefreshTokenAsync(CancellationToken.None);
using (var client = new SmtpClient())
{
client.Connect("smtp.gmail.com", 587);
var credentials = new NetworkCredential(googleCredentials.UserId, googleCredentials.Token.AccessToken);
client.Authenticate(credentials);
await client.SendAsync(message);
client.Disconnect(true);
}
Authenticate
调用会出现以下错误:
MailKit.Security.AuthenticationException : AuthenticationInvalidCredentials: 5.7.8 用户名和密码不被接受。请在 5.7.8 https://support.google.com/mail/?p=BadCredentials m3-v6sm3447324wrs.39 - gsmtp了解更多信息。
异常中的Google支持页面基本上只是建议使用两步验证+应用程序密码或启用不安全的应用程序。我都不想这样做。为什么在.NET中这么难做到呢?我以前使用Node做过,非常简单:
var smtp = mailer.createTransport({
service: "Gmail",
auth: {
type: "OAuth2",
user: process.env.EMAIL,
clientId: process.env.CLIENT_ID,
clientSecret: process.env.CLIENT_SECRET,
refreshToken: process.env.REFRESH_TOKEN
}
});
请注意,我已经看到了这个答案,但我真的不明白如何获得被谷歌信任的X509证书。 据我所知,谷歌文档中没有相关内容。