SmtpClient smtp = new SmtpClient(this.Host!, (int)this.Port!) { Credentials = new NetworkCredential(this.User!, this.Password!), EnableSsl = true, UseDefaultCredentials = false };
MailMessage message = new MailMessage(this.SenderAddress!, this.ReciverAddress!, this.Subject, this.Body) { From = new MailAddress(this.SenderAddress!, this.SenderName) };
SmtpClient smtp = new SmtpClient(this.Host!, (int)this.Port!) { Credentials = new NetworkCredential(this.User!, this.Password!), EnableSsl = true, UseDefaultCredentials = false };
MailMessage message = new MailMessage(this.SenderAddress!, this.ReciverAddress!, this.Subject, this.Body) { From = new MailAddress(this.SenderAddress!, this.SenderName) };
在不同的开发框架下,使用的代码完全一致。但是在.Net FrameWork 4.7 框架下发送邮件才会出现异常:**5.7.1 Client was not authenticated**,而.Net 6.0 环境下不会。我不得不怀疑是不是微软的封装类System.Net.Mail存在问题。经过断点调试,终于发现了2个环境发送邮件时存在的差异。
.Net 6.0框架下用户传入的凭证(账号密码)SMTP服务器可正常获取到
.Net FrameWork 框架下竟然获取的凭证为空
经过短暂思考,我决定修改下.Net FrameWork框架下的开发代码。如下:
点击查看代码
public bool Send()
{
try
{
smtp = new SmtpClient(this.Host, (int)this.Port);
smtp.Credentials = new NetworkCredential(this.User,this.Password);
smtp.EnableSsl = true;
//smtp.UseDefaultCredentials = false;
MailMessage message = new MailMessage(this.SenderAddress, this.ReciverAddress, this.Subject, this.Body) { From = new MailAddress(this.SenderAddress, this.SenderName) };