这似乎让我困惑,我已经在旧应用程序上使用我们机构的电子邮件(位于谷歌套件(工作空间)上)设置了 Identity 2.0。 因此,我们决定使用 gmail smtp 来发送电子邮件,(启用安全性较低的应用程序)在 google 上作为我们需要发送的电子邮件地址。
我注意到 2 因素身份验证电子邮件已正确发送,但所有包含身份
callbackCode
的电子邮件均未发送。 Gmail 正在向发件人电子邮件发送一封邮件,表明该电子邮件被拒绝。
我们改变了方法,删除了链接,只是决定发送链接供用户复制并粘贴到浏览器中。 现在,“忘记密码”功能可以使用,电子邮件确认电子邮件不会在生产中发送,并且电子邮件收件箱或发件箱中没有任何内容可确定错误是什么。它每次在开发环境中都会发送电子邮件确认电子邮件。
我想可能与gmail的关系比与代码的关系更大,所以我在这里没有添加任何代码。 任何指针为什么会这样,以及我们如何开始调试以查看实际发生的情况。
private async Task<bool> SendEmailAsync(string email, string subject, string message, string name = null)
{
var toName = string.IsNullOrEmpty(name) ? email : name;
var messageBody = new MimeMessage();
messageBody.From.Add(new MailboxAddress(_app, _emailSettings.EmailAddress));
messageBody.To.Add(new MailboxAddress(toName, email));
messageBody.Subject = subject;
var messType = StringUtils.ContainsHTMLElements(message) ? "html" : "plain";
messageBody.Body = new TextPart(messType)
{
Text = message
};
await SendAsync(messageBody);
return true;
}
这是sendAsync
private async Task SendAsync(MimeMessage messageBody)
{
using (var client = new SmtpClient())
{
await client.ConnectAsync("[email protected]", 587, MailKit.Security.SecureSocketOptions.Auto);
await client.AuthenticateAsync("[email protected]", "password");
await client.SendAsync(messageBody);
await client.DisconnectAsync(true);
}
}
这是我的示例中的代码。我认为您忘记了 smtp 服务器,请尝试使用
NetworkCredential
并确保您发送的是 AppsPassword
而不是实际的 gmail 用户密码。
var smtpClient = new SmtpClient("smtp.gmail.com")
{
Port = 587,
Credentials = new NetworkCredential(From , GoogleAppPassword),
EnableSsl = true,
};
var mailMessage = new MailMessage
{
From = new MailAddress(From),
Subject = Subject,
Body = Body,
IsBodyHtml = true,
};
mailMessage.To.Add(To);
smtpClient.Send(mailMessage);