c# - 在旧代码中发送邮件时出现 SMTP 身份验证错误
问题描述
我遇到了一个奇怪的问题,正如标题所说,每当我尝试发送邮件时,都会引发以下异常:
System.Net.Mail.SmtpException: 'SMTP 服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1 需要身份验证。了解更多信息'
没有什么不寻常的,但是这是大约 2 年前编写的代码,从那时起就没有被触及过,今天我运行它时 - 突然不起作用。
public static Task SendEmailAsync(string email, string subject, string htmlMessage)
{
return Task.Run(() =>
{
using (var client = BuildClient())
{
var message = BuildMessage(email, subject, htmlMessage);
client.Send(message);
}
});
}
private static SmtpClient BuildClient()
{
var smtp = new SmtpClient("smtp.gmail.com", 587)
{
EnableSsl = true,
UseDefaultCredentials = false,
Credentials = new NetworkCredential("xxxxx@abv.bg", "xxx")
};
return smtp;
}
private static MailMessage BuildMessage(string email, string subject, string htmlMessage)
{
var mailMessage = new MailMessage
{
From = new MailAddress("xxxx@abv.com"),
Subject = subject,
Body = htmlMessage
};
mailMessage.To.Add(email);
return mailMessage;
}
如您所见,主机是 gmail.com,但我使用的是不同的电子邮件提供商 abv.bg,我也尝试将其与 gmail 帐户交换,但错误仍然相同。
这是原始代码的稍微缩短的版本,但这也会产生错误,因为我没有使用 gmail,所以没有“不太安全的应用程序”或 2fa 这样的东西,这不可能是原因,即使它是当我尝试使用 gmail 帐户时,我启用了不太安全的应用程序选项,但无济于事。我已经在 .net core 3.0 和 .net framework 4.7.2 下运行了这段代码,结果相同。我也完全在本地运行它,所以时区应该不是问题。我检查了密码和电子邮件的三倍、四倍。
所以我基本上不知道为什么会这样,任何提示都将不胜感激。
解决方案
推荐阅读
- sql - where 子句中的表列值
- c# - 无法使用 System.Windows.Media.Imaging 虽然 PresentationCore.dll
- html - 引导轮播调整大小
- python - 优化sklearn中的数据准备(One-Hot Encoding)过程
- ios - 如何在 Swift 中使用三个按钮选择三个图像
- python-3.x - Gym wrapper videorecorder 在 Hopper-v2 环境中无法正常工作。给出分段错误
- python - 使用 Python 将 CSV 文件转换为多个 dict
- python - 转换数据框,使数字列标准化并编码分类列
- javascript - 检查其范围之外的变量
- arrays - 数组中的通配符查找 - VBA