- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试创建一个应用程序,在客户进行购买时向他们发送电子邮件。我们有自己的 GMail 帐户,我将使用该帐户发送电子邮件。
我已经在 Google API 控制台中设置了我的应用程序并创建了凭据。我找到了 this question在 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 Username and Password not accepted. Learn more at 5.7.8 https://support.google.com/mail/?p=BadCredentials m3-v6sm3447324wrs.39 - gsmtp
异常中的 Google 支持页面基本上只是说要么使用两步验证 + 应用密码,要么启用安全性较低的应用。这两个我都不要为什么在 .NET 中执行此操作如此困难?我以前用节点做过这个,它非常简单:
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
}
});
请注意,我已经看到了this answer但我真的不明白我是如何获得谷歌信任的 X509 证书的。据我所知,在 Google 的文档中没有与此相关的内容。
最佳答案
解决方案是使用 SaslMechanismOAuth2
而不是 NetworkCredential
进行身份验证。我现在有以下有效的方法:
var secrets = new ClientSecrets
{
ClientId = Environment.GetEnvironmentVariable("GMailClientId"),
ClientSecret = Environment.GetEnvironmentVariable("GMailClientSecret")
};
var googleCredentials = await GoogleWebAuthorizationBroker.AuthorizeAsync(secrets, new[] { GmailService.Scope.MailGoogleCom }, email, CancellationToken.None);
if (googleCredentials.Token.IsExpired(SystemClock.Default))
{
await googleCredentials.RefreshTokenAsync(CancellationToken.None);
}
using (var client = new SmtpClient())
{
client.Connect("smtp.gmail.com", 587, SecureSocketOptions.StartTls);
var oauth2 = new SaslMechanismOAuth2(googleCredentials.UserId, googleCredentials.Token.AccessToken);
client.Authenticate(oauth2);
await client.SendAsync(message);
client.Disconnect(true);
}
关于c# - 使用带有 Gmail OAuth 的 MailKit 发送邮件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51081442/
我有一个控制台应用程序,并且安装了mailkit软件包以用于消息传递目的。 我在测试mailkit smtp客户端的主要方法中有代码。我正在运行smtp4dev虚拟服务器,并且客户端代码是带有注释身份
我的问题: 相同的代码在一个实例中工作正常,但无法在项目的另一个实例中使用相同的用户名/密码进行身份验证。 我的代码: static NetworkCredential _emailLoginCred
我正在使用 MailKit 创建一个电子邮件管理系统。 我需要跟踪交付,但我只能找到 DeliveryStatusNotification 枚举,但无处应用。 我目前拥有的是: var message
我正在尝试使用 Gmail 帐户发送电子邮件。我可以用 yahoo 发送电子邮件,但是,由于某种未知原因,它不再工作了。我也发布了一个关于这个的问题,但没有回应。 在这种情况下,我试图连接到一个 gm
我正在向 alias@company.com 发送电子邮件,这是真实邮箱地址的别名。然后我使用 MailKit 连接到真实邮箱(假设为 realmailbox@company.com)并检索消息。当我
我正在使用名为:MailKit 的 IMAP4 客户端。 效果很好,但我不知道邮件是否有附件。 我试过: var summary = inbox.Fetch(MessageId,MessageSumm
我试图在 mailkit 中找到一个在 IMAP 中执行命令“执行追加”的方法,在 C# 中我会这样做: MailMessage mg = null; using (ImapClient cl = n
我正在尝试保存邮件中的附件 foreach(MimeKit.MimeEntity at message.Attachments) { at.WriteTo("nameFile"); } 文件已
有人知道 MailKit 是否支持阅读回执(阅读后回复消息)吗?我没有在网络上或 Stackoverflow 上找到任何东西。 最佳答案 已读回执(即当用户打开邮件时自动发送邮件)不是 MailKit
MailKit.Net.Imap 有 MoveTo(...)。但是如果我们移动消息,消息将获得新的 UniqueID(因为它在文件夹中是唯一的)。如何获取消息的新 UniqueID? 最佳答案 采用
当我尝试使用 MailKit SmtpClient 连接到我的 SMTP 服务器时出现异常。 但是 如果我使用 System.Net.Mail.SmtpClient,我的邮件已成功发送具有相同的参数!
在尝试打开邮件文件夹时,我们在客户端遇到了一些问题并且找不到它,因此我创建了以下方法来尽我所能找到邮件文件夹所在的文件夹 namespace 。 private FolderNamespace Fin
我有一个复杂的电子邮件模板,其中包含许多 div、section 和其他 HTML 元素。 HTML 模板引用了 CSS(已上传到服务器)。我正在使用以下代码通过 MailKit 发送 HTML 电子
我有一个复杂的电子邮件模板,其中包含许多 div、section 和其他 HTML 元素。 HTML 模板引用了 CSS(已上传到服务器)。我正在使用以下代码通过 MailKit 发送 HTML 电子
我正在为我的项目使用 Mailkit 库 (Imap)。 我可以轻松地通过 SmtpClient 发送新消息。 目前我正在研究如何回复特定邮件。是否可以向该回复邮件添加更多收件人? @jstedfas
这个问题在这里已经有了答案: Retrieve IMAP email based on date AND time? (1 个回答) 关闭 4 年前。 我正在构建一个 C# 函数来定期从本地电子邮件
我尝试使用 Mailkit 连接邮件服务器,但它永远加载在 ImapClient.connect 上。我没有反应,没有错误,也没有日志。 我使用 .NET Framework 4.5.1 c# Vis
当使用 MailKit 我的邮箱的收件箱发生邮件或更改时,即时通知的最佳方式是什么? 我一直在玩弄以下事件:ImapClient.Inbox.CountChanged;这似乎在使用 Exchange
在谷歌搜索没有结果后,我会问我的问题: Mailkit.UniqueId 是什么? 在结构的元数据中只是读取 Represents a unique identifier for messages i
我正在使用 MailKit 从 gmail 帐户读取邮件。效果很好。但是,我想获取消息状态,例如是否已读、未读、重要、已加星标等。MailKit 可以吗?我似乎找不到任何相关信息。 这是我的代码:
我是一名优秀的程序员,十分优秀!