(此文章同时发表在本人微信公众号“dotNET每日精华文章”,欢迎右边二维码来关注。)

题记:目前.NET Core 1.0中并没有提供SMTP相关的类库,那么要如何从ASP.NET Core 1.0中发送邮件呢?本文将介绍几种可行的方式。

由于.NET Core是微软重写的一个开源跨平台.NET运行时,所以其中裁剪了很多非核心的类库。比如你现在无法在.NET Core或ASP.NET Core中使用System.Net.Mail的SmtpClient来发送邮件了,那么还有什么办法呢?

从一个Web应用的角度看,发送邮件也是有几种方式可选的:

1,调用外部的邮件发送云服务。比如:SendCloud(之前基于它构建过公司的EDM发送系统),阿里云最近也推出了邮件推送(Direct Mail)服务,以及在Azure中的SendGrid服务。这些服务一般都提供了REST API,所以调用的时候只需要调用常见REST服务那样就行(需要引入Microsoft.AspNet.Http包)。

2,调用SMTP Server来发送。正如上面提到的,.NET Core中没有内置SMTP的函数库,那么就需要引入第三方的包(比如MailKit)。在CodeProject的一篇文章中(http://www.codeproject.com/Articles/1081306/How-to-Send-Emails-in-ASP-NET-Core),详细讲解了MailKit的使用,用法和原来的SmtpClient大同小异,这里就不赘述了。

3,上面的这篇文章也提到了一种变通的方法,就是根据STMP的规范生成邮件的文本文件,放到SMTP Server的Pick文件夹下。

4,最后,你实际上也可以自建一个邮件发送服务。比如我之前用于某SaaS的邮件发送功能,就是基于完整的.NET 4.6运行时写了一个Azure WebJobs,从消息队列中获取发送内容,然后调用SMTP Server来最终发送邮件。而要发送邮件的ASP.NET Core应用程序,只需要写入队列消息即可。未来可以根据情况,把SMTP Server的调用替换为邮件发送云服务,而对邮件发送的Web应用不会有任何影响。其中我上面提到的EDM发送系统就是使用这种架构,只是当时用的不是Azure WebJobs而是Hangfire

在ASP.NET Core 1.0中如何发送邮件的更多相关文章

  1. ASP.NET Core 1.0 中的依赖项管理

    var appInsights=window.appInsights||function(config){ function r(config){t[config]=function(){var i= ...

  2. ASP.NET Core 1.0 中使用 Swagger 生成文档

    github:https://github.com/domaindrivendev/Ahoy 之前文章有介绍在ASP.NET WebAPI 中使用Swagger生成文档,ASP.NET Core 1. ...

  3. 用ASP.NET Core 1.0中实现邮件发送功能

    准备将一些项目迁移到 asp.net core 先从封装类库入手,在遇到邮件发送类时发现在 asp.net core 1.0中并示提供SMTP相关类库,于是网上一搜发现了MailKit 好东西一定要试 ...

  4. 在ASP.NET Core 2.0中使用CookieAuthentication

    在ASP.NET Core中关于Security有两个容易混淆的概念一个是Authentication(认证),一个是Authorization(授权).而前者是确定用户是谁的过程,后者是围绕着他们允 ...

  5. 如何在ASP.NET Core 2.0中使用Razor页面

    如何在ASP.NET Core 2.0中使用Razor页面  DotNetCore2017-11-22 14:49 问题 如何在ASP.NET Core 2.0中使用Razor页面 解 创建一个空的项 ...

  6. ASP.NET Core 3.0中使用动态控制器路由

    原文:Dynamic controller routing in ASP.NET Core 3.0 作者:Filip W 译文:https://www.cnblogs.com/lwqlun/p/114 ...

  7. asp.net core 3.0 中使用 swagger

    asp.net core 3.0 中使用 swagger Intro 上次更新了 asp.net core 3.0 简单的记录了一下 swagger 的使用,那个项目的 api 比较简单,都是匿名接口 ...

  8. 探索 ASP.Net Core 3.0系列三:ASP.Net Core 3.0中的Service provider validation

    前言:在本文中,我将描述ASP.NET Core 3.0中新的“validate on build”功能. 这可以用来检测您的DI service provider是否配置错误. 具体而言,该功能可检 ...

  9. 在Asp.Net Core 3.0中如何使用 Newtonsoft.Json 库序列化数据

    在.Net Core 3.0中 内置了一套Json序列化/反序列化方案,默认可以不再依赖,不再支持   Newtonsoft.Json. 但是.NET Core 3.0 System.Text.Jso ...

随机推荐

  1. phpcms调用某个栏目下的所有二级栏目

    在html中直接这样调用就可以了,subcat中的值为父栏目的catid {loop subcat(93) $r}{/loop} 注意subcat方法的参数,如果只写一个参数,也就是父栏目id,那该父 ...

  2. 使用WITH AS提高性能简化嵌套SQL

    一.WITH AS的含义 WITH AS短语,也叫做子查询部分(subquery factoring),可以让你做很多事情,定义一个SQL片断,该SQL片断会被整个SQL语句所用到.有的时候,是为了让 ...

  3. 《Head First Servlet JSP》学习笔记二

    一. 二. 三. 四. 五. 六. 七. 八. 九. 十. 十一. 十二.  

  4. [转载] C++ 突破私有成员访问限制

    最后一个方式 模板尚未弄清楚. 我们在写代码的时候,按约定都是把成员数据放到private访问区中,然后在通过相应的函数来存取.那又有什么样的代码可以突破访问权限来直接操作类中private区段中的成 ...

  5. CSS中的float与clear

    参考: http://www.cnblogs.com/iyangyuan/archive/2013/03/27/2983813.html http://www.cnblogs.com/iloveyou ...

  6. java web 学习 --第八天(Java三级考试)

    第七天的学习内容:http://www.cnblogs.com/tobecrazy/p/3464231.html EL表达式 EL : Expression Language 使用EL表达式可以减少& ...

  7. Gym 100703K Word order 贪心

    题目链接 题意:给定一个长度为n的字符串,字符串仅由"F","N","A"三种字符组成,现有一种操作P,即把两个相邻的字符调换位置.要求把所 ...

  8. 20145213《Java程序设计》第八周学习笔记

    20145213<Java程序设计>第八周学习笔记 教材学习内容总结 "桃花春欲尽,谷雨夜来收"谷雨节气的到来意味着寒潮天气的基本结束,气温回升加快.刚出冬的我对于这种 ...

  9. 如何更改UITextField 的placeholder 的字体颜色

    storyboard 中这样设置 具体步骤: 1.在User Defined Runtime Attributes中添加一个Key. 2.输入Key Path(这里我们输入_placeholderLa ...

  10. 图像特征提取之LBP特征

    LBP(Local Binary Pattern,局部二值模式)是一种用来描述图像局部纹理特征的算子:它具有旋转不变性和灰度不变性等显著的优点.它是首先由T. Ojala, M.Pietik?inen ...