在.Net Core中发送电子邮件而不使用类库

时间:2017-05-29 17:13:27

标签: asp.net-core-mvc .net-core

.Net Core(截至目前)缺少System.Net.Mail命名空间,并且该命名空间的预览版本通过nugget可用,缺少SmtpClient,它是最重要的类型。但是,如果由于某些原因(例如成为独立的英雄)不喜欢使用类库,有没有办法使用.Net Core中的可用工具发送电子邮件(HttpWebRequest,HttpClient,Sockets等) ?如果是这样,怎么办呢(示例而非理论)。

1 个答案:

答案 0 :(得分:0)

您绝对可以编写自己的库来发送电子邮件。问题是“你应该吗?”除非您完全打算将图书馆提供给广大受众,否则所需的时间不会是值得的。

原始SMTP Specification (RFC 821)https://tools.ietf.org/html/rfc821)约为68页。实现此规范是“可行的”,但需要付出巨大努力。较新的SMTP Specification (RFC2821)https://tools.ietf.org/html/rfc2821)是79页。

除了实现RFC 2821中指定的功能之外,您还需要熟悉许多其他RFC和文档。 (简要介绍第68至70页列出的参考资料肯定会让你暂停一下。)

使用.NET Core发送邮件的任何人的最佳选择是使用SendGrid(http://sendgrid.com/)等服务或MailKit(https://github.com/jstedfast/MailKit)等免费开源库。我相信大多数.NET Core部署的网站都使用这两种方法中的一种来发送电子邮件。

Steve Gordon在使用带有ASP.NET Core的MailKit库时做了一篇非常好的博文(https://www.stevejgordon.co.uk/how-to-send-emails-in-asp-net-core-1-0)。

即使您想构建自己的SMTP librar y(并且我绝对不提倡这样做),最好的方法可能是通过{来MailKithttps://github.com/jstedfast/MailKit)之类的东西。 {1}}然后修改它。这至少可以让你玩并迭代修改工作实现。

您的大多数工作都是使用GitHub命名空间中的组件完成的。以下是System.Net.Sockets版本(https://docs.microsoft.com/en-us/dotnet/api/system.net.sockets?view=netframework-4.7)的参考。它应该与.NET Framework 4.7实现非常相似,尽管我还没有测试过它。

有时最好的建议是“仅仅因为你不能意味着你应该这样做”。请不要成为“独立英雄”。去做有用的。