微软为什么放弃了 SmtpClient?可能的原因是什么?

7

3
我投票关闭此问题,因为[我们不是您喜爱的公司的客户支持部门]。 - EJoshuaS - Stand with Ukraine
3
抱歉,我不同意。这个问题更多地涉及到我想了解的“技术设计”,而不是想要问微软的原因。了解微软团队出了什么问题可以帮助你提高自己,以便在未来遇到相同的设计时不会犯同样的错误。 - Luke Vo
2
API并不过时!MS文档是由代码生成的,而这个API在Xamarin/Mono中被标记为过时。目前还存在一个bug,MS正在努力修复,详见此讨论https://dev59.com/6FcP5IYBdhLWcg3w_e12。 - Alex from Jitbit
今天我再次检查了 .NET Core 3.1,虽然它并不过时,但官方文档仍建议不要使用它。 - Luke Vo
1个回答

3
SmtpClient不支持DKIM(或SPF)身份验证。它不会发送自然的RSA密钥,一些邮件提供商认为小于1024位的密钥像gmailorange一样垃圾邮件。
请在这里查看“我的域名发送的消息未经过身份验证”段落。
我最近也更改了我的实现,并建议使用MailKit:代码定义几乎相同(允许您保留MailMessage对象),并且非常好用!
using (var client = new MailKit.Net.Smtp.SmtpClient())
{
      client.Connect(Host, Port, UseSsl);
      client.Authenticate(Credential.UserName, Credential.Password);
      client.Send(MimeMessage.CreateFromMailMessage(new MailMessage()));
      client.Disconnect(true);
}

微软为什么不修补自己的实现,而是引用外部包呢? - Luke Vo
我不知道,可能没有足够的时间来实现DKIM或计划在未来版本中实现它。 - GGO
我之前使用SmtpClient一直很顺利,直到我看到微软推荐使用MailKit。我尝试了一下,在使用.Net 5时,连接就失败了。这应该是可以正常工作的。 使用以下代码: using (var client = new SmtpClient()) client.Connect(_SMTP, _PORT, false); 我现在又回到了SmtpClient。 - Gregory Bologna
@GregoryBologna,MailKit很好用,我认为您可能存在引用冲突问题,请尝试使用MailKit.Net.Smtp.SmtpClient。 - GGO
它在SSL上失败了,但我已将其设置为false。我使用的是.NET 5,这里可能有问题吗?这是我的测试代码。 var message = new MimeMessage(); message.From.Add(new MailboxAddress("'Test' no-reply@example.com", "no-reply@example.com")); message.To.Add(new MailboxAddress("Greg B", "gregb@example.com")); message.Subject = "test"; message.Body = new TextPart("plain"){Text = @"mail message test"}; using (var client = new SmtpClient()){ client.Connect(_SMTP, _PORT, false); client.Send(message); client.Disconnect(true);} - Gregory Bologna
@GregoryBologna,请在另一个话题中使用屏幕截图或详细的错误信息提出您的问题。 - GGO

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接