(此文章同时发表在本人微信公众号“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. SVN里常见的图标及其含义

    - 已忽略版本控制的文件.可以通过Window → Preferences → Team → Ignored Resources.来忽略文件.A file ignored by version con ...

  2. neutron中创建子网时禁用dhcp服务的问题

    在neutron中创建provider网络时,可以指定是否禁用dhcp.若禁用,就可以使用物理网络中的dhcp服务.若使用物理网络的dhcp,就要禁用子网中提供的.如图

  3. SqlBulkCopy 批量复制数据到数据表

    使用 SqlBulkCopy 类只能向 SQL Server 表写入数据.但是,数据源不限于 SQL Server:可以使用任何数据源,只要数据可加载到 DataTable 实例或可使用 IDataR ...

  4. MongoDB 副本集管理(不定时更新)

    简介: 前面介绍完了副本集的搭建.用户的管理.参数和日常操作的说明,那副本集搭建好该如何管理呢?现在来说明下副本集的日常查看和管理. 说明: 1)查看命令行参数:db.serverCmdLineOpt ...

  5. Make My GitHub Pages

    https://git-scm.com/ https://pages.github.com/ 1.建立repository. 2.settings 3.选模板 4.Publish http://use ...

  6. C#文本选中及ContextMenuStrip菜单使用

    '文本框选中显示'TextBox1.SelectAll()选择所有文本'textBox1.Text.Insert(start,strInsertText)指定位置添加文本1 Private Sub T ...

  7. Oracle 修改现有列的数据类型

    如果表中有数据,Oracle是不能修改其数据类型的.但可以通过新建一个临时列,将要修改列的数据复制到临时列中,删除原列再修改临时列的名字.这样说好像有点拗口,分步解说一下. 表AC_REG中有列:is ...

  8. 关于Windows下的文件后缀名问题

    一.背景说明 有很多的小伙伴对windows下的文件后缀名不能很好地理解作用和区别,更不用说高深的使用了,在这里给大家说一下这些文件后缀名到底有什么区别,有什么作用呢? 二.说明 简单的说来,wind ...

  9. CentOS yum的详细使用方法

    yum是什么yum = Yellow dog Updater, Modified主要功能是更方便的添加/删除/更新RPM包.它能自动解决包的倚赖性问题.它能便于管理大量系统的更新问题yum特点可以同时 ...

  10. SQLServer视图

    视图简介:通过定义 SELECT 语句以检索将在视图中显示的数据来创建视图.SELECT 语句引用的数据表称为视图的基表.在SQL Server 2005系统中,可以把视图分为3种类型,即标准视图,索 ...