尝试通过 MVC 5 C# 发送电子邮件。此新创建的电子邮件地址位于 Office 365 服务器上。在线尝试了许多解决方案,但无济于事,我收到以下错误消息:SMTP 服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.7.57 SMTP;客户端未经过身份验证以在 MAIL FROM [LO3P265CA0018.GBRP265.PROD.OUTLOOK.COM] 期间发送匿名邮件。我的代码如下:
public void ConcernConfirmEmail(Appointments a, EmailConfig ec)
{
Dictionary<string, string> tokens = new Dictionary<string, string>();
tokens.Add("Name", a.sirenDetail.FirstName);
tokens.Add("Time", a.start.ToString("HH:mm"));
tokens.Add("Date", a.start.ToString("dd/MM/yyyy"));
tokens.Add("Location", a.site.SiteDescription);
using (SmtpClient client = new SmtpClient()
{
Host = "smtp.office365.com",
Port = 587,
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential(ec.EmailUser, ec.EmailPassword),
TargetName = "STARTTLS/smtp.office365.com",
EnableSsl = true
})
{
MailMessage message = new MailMessage()
{
From = new MailAddress("emailadress@myorg.net"),
Subject = "Subject",
Sender = new MailAddress("emailadress214@myorg.net", "password"),
Body = PopulateTemplate(tokens, GetTemplate("ConfirmTemplate.html")),
IsBodyHtml = true,
BodyEncoding = System.Text.Encoding.UTF8,
SubjectEncoding = System.Text.Encoding.UTF8,
};
message.To.Add(a.sirenDetail.EmailAddress.ToString());
client.Send(message);
}
}
根据微软官方文档,SmtpClass已经过时了一段时间,微软鼓励开发人员使用新的开放souce Smtp实现,如MailKit。
使用带有用户名和密码身份验证的MailKit时,必须将身份验证机制设置为使用NTLM。
下面是一个工作示例:
public async Task Send(string emailTo, string subject, MimeMessage mimeMessage, MessagePriority messagePriority = MessagePriority.Urgent)
{
MimeMessage mailMessage = mimeMessage;
mailMessage.Subject = subject;
mailMessage.Priority = messagePriority;
if (emailTo.Contains(';'))
{
foreach (var address in emailTo.Split(';'))
{
mailMessage.To.Add(new MailboxAddress("", address));
}
}
else
{
mailMessage.To.Add(new MailboxAddress("", emailTo));
}
mailMessage.From.Add(new MailboxAddress("Sender", _smtpCredentials.SenderAddress));
using var smtpClient = new SmtpClient
{
SslProtocols = SslProtocols.Tls,
CheckCertificateRevocation = false,
ServerCertificateValidationCallback = (s, c, h, e) => true,
};
await smtpClient.ConnectAsync(_smtpCredentials.Server, _smtpCredentials.Port, SecureSocketOptions.StartTlsWhenAvailable);
await smtpClient.AuthenticateAsync(new SaslMechanismNtlm(new NetworkCredential(_smtpCredentials.User, _smtpCredentials.Password)));
try
{
await smtpClient.SendAsync(mailMessage);
}
catch (Exception ex)
{
}
finally
{
if (smtpClient.IsConnected) await smtpClient.DisconnectAsync(true);
}
}
这里最重要的一行是
await smtpClient.AuthenticateAsync(new SaslMechanismNtlm(new NetworkCredential(_smtpCredentials.User, _smtpCredentials.Password)));
也就是将NTLM设置为客户端使用的身份验证机制。
但
如果您现在无法更改Smtp库,您可以尝试将您的代码更改为如下所示,就像在旧服务中使用的那样,并且工作正常:
using (var smtpClient = new SmtpClient(smtpServer)
{
UseDefaultCredentials = false,
DeliveryMethod = SmtpDeliveryMethod.Network,
Credentials = new NetworkCredential(user, password),
EnableSsl = false,
Port = 587
})
请注意,更改只是在设置为false的EnableSsl上进行,而不需要设置TargetName属性。
希望这有所帮助
我已经尝试让我的应用程序发送电子邮件超过一个小时了,我已经尝试了我在网上找到的所有东西,但我仍然得到了我的问题标题中提到的例外情况。 下面是我使用的代码: 我允许在我的帐户上访问不太安全的应用程序。我也尝试过启用2FA并生成特定于应用程序的密码,但例外情况仍然存在。
在我的Gmail A/C上,我从production server运行代码后收到了以下电子邮件 嗨, 最近有人使用您的密码尝试登录您的Google帐户mymailid@gmail.com。此人正在使用电子邮件、客户端或移动设备等应用程序。 2014年1月3日星期五13:56:08点钟UTC IP地址:xxx.xx.xx.xxx(abcd.net.)地点:美国宾夕法尼亚州费城 如果您无法识别此登录尝
这是我的密码 我该怎么办?有时起作用,有时不起作用。
嗨,我知道这个问题有点多余,但我有不同的体验,这里是我的代码发送电子邮件后,创建帐户在ASP.NET 奇怪的是,当我在本地主机上运行该网站时,gmail允许它运行,但当我在vps上运行该网站时,gmail拒绝并给出这个错误 SMTP服务器需要安全连接或客户端未通过身份验证。服务器响应为:5.5.1需要身份验证 任何帮助都会帮助tnx
我正在尝试通过我的 asp.net 应用程序发送电子邮件,但它抛出错误“SMTP服务器需要安全连接或客户端未经过身份验证。服务器响应为:5.7.57 SMTP;客户端未通过身份验证,无法在来自 [SG2PR0601CA0003.apcprd06.prod.outlook.com] 的邮件期间发送匿名邮件”