Azure : 通过 SendGrid 发送邮件

SendGrid 是什么?

SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递。并且具有可扩充性和实时分析的能力。常见的用例有:
1. 自动回复用户的邮件
2. 定期发送信息给用户
3. 生成报表等

由于使用 SendGrid 这样的第三方邮件服务既稳定可靠,又不用自己维护邮件服务器。并且对于邮件发送量不大的应用,免费发送的邮件数 (每个月 25000 封)已经可以满足需求。所以越来越多的应用都开始使用这种邮件服务来发送邮件。
下面我们从 Azure 上创建 SendGrid 账号开始,介绍如何通过 SendGrid 发送邮件。

创建 SendGrid 账号

登录 Azure 的管理网站,点击 "+" 开始创建 SendGrid 账号。在搜索栏中输入 "SendGrid Email Delivery" 并回车:

选择 "SendGrid Email Delivery" 进入简介界面:

在简介界面中,您可以读到一些基本的信息,当然直接点击 "Create" 就可以了!此时进入创建 SendGrid 详情界面,基本信息我们就不关注了,看看 Pricing tier 中F1 free 的收费标准吧。这可是货真价实的每个月 25000 封免费邮件。最后点击 "Create" 完成创建:

SendGrid 账号创建完成后我们去看一下它的 Configurations 信息:

在使用 SendGrid 发送邮件时,需要用到这里的信息。首先您会看到用户名已经被处理过了,在访问 SendGrid 服务时,我们使用的就是这个被处理过的用户名称。还有下面的 SMTP SERVER,也就是说当我们创建了 SendGrid 账号后,还可以用传统的方式通过指定的 smtp 服务器来发送邮件。

在C# 项目中使用 SendGrid

假如我们要在一个 asp.net 的应用中通过 SendGrid 发送邮件。要使用 SendGrid 服务需要先在该项目中安装 SendGrid 提供的组件。请在 Visual Studio 的 Package Manager Console 中执行下面的命令:

> Install-Package Sendgrid -Version 6.3.4

注意,SendGrid 的API 升级很快,我们这里使用的是 V2 版本的 API,所以要指定安装的版本。

发送测试邮件

万事俱备,让我们先发送一封普通的邮件试试:

// 请使用前面介绍的被 SendGrid 处理过的用户名。
string username = "xxxxx";
string password = "yyyyy";
var credentials = new NetworkCredential(username, password);
var transport = new Web(credentials);

var myMessage = new SendGridMessage();
myMessage.From = new MailAddress("fromaddress");
myMessage.AddTo("toaddress");
myMessage.Subject = "test";
myMessage.Html = "<p>Hello World!</p>";

// 通过异步方法发送邮件。
transport.DeliverAsync(myMessage);

代码很简单,不需要解释。需要注意的是这段代码在您本地调试时是无法发送邮件的。您需要把您的应用发布到 Azure的 Web App 或是 Cloud Service 上才能成功的发送邮件。

发送带附件的邮件

您可以使用 SendGridMessage.AddAttachment 方法为您的邮件添加附件。这个方法有两个重载,分别是指定文件路径和文件流。因为如果您的程序运行在 Azure上,读取文件流的用例会多一些。

如果您还需要其它一些功能,请详细的阅读 SendGridMessage 类型的 API,它基本上能够满足您所有的需求。

已知问题

如果您有一个非常顽固的用户,他要求您发出的邮件内容必须是纯文本的形式 (主要是为了保持手动创建的各种换行和缩进),不能是 HTML 格式的。这会是一个不小的挑战,因为 SendGrid 默认把邮件内容包成了 HTML 格式。不过我们还是有机会满足您的客户,您可以尝试在每一行文本前面添加一个半角的空格。这是 SendGrid 官方给出的方法,也曾救过笔者一命,但愿您不会碰到这样的客户!
其实,还有另外一种方式可以实现类似的效果。那就是把所有的文本内容放到 html 的<pre>元素中。代码也很简单:

message.Html = string.Format("<pre>{0}</pre>", System.Web.HttpUtility.HtmlEncode(message.Text));

总结

本文概要的介绍了在 Azure 上的 C# 应用中,如何使用 SendGrid 发送电子邮件。虽然代码不多,但描述了整个操作过程,希望对朋友们有所帮助。

时间: 2024-10-18 19:17:31

Azure : 通过 SendGrid 发送邮件的相关文章

.Net中使用SendGrid Web Api发送邮件(附源码)

SendGrid是一个第三方的解决邮件发送服务的提供商,在国外使用的比较普遍.国内类似的服务是SendCloud.SendGrid提供的发送邮件方式主要是两种, 一种是SMTP API, 一种是Web Api. SMTP API是一种比较简单的方式,只要我们准备好Mail Message, 直接发送到SendGrid的邮件服务器就可以了,SendGrid的邮件服务器会帮我们投递.另外一种是Web Api的方式. 一般来说,很多三方的服务器提供商都会禁止链接外部25端口,这样你就没有办法连接Sen

深入理解Azure自动扩展集VMSS(1)

前文中已经详细介绍了如何配置和部署Azure的虚拟机扩展集VMSS进行自动扩展,但在实际使用过程当中,用户会出现更进一步使用的一些问题,VMSS基本扩展原理及怎么简单调试?如何进行手动扩展?怎么使用自定义镜像?在设计的时候有哪些最佳实践和考量等等. 本文通过测试自动扩展功能开始,逐步介绍如下主题: VMSS自动扩展测试及告警规则配置 VMSS中Autoscale基本原理及诊断 VMSS实践及建议 VMSS手动扩展 VMSS中使用定制化镜像 VMSS自动扩展测试及邮件告警规则配置 在你初始创建了V

一个基于Microsoft Azure、ASP.NET Core和Docker的博客系统

原文地址: http://www.cnblogs.com/daxnet/p/6139317.html 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为“希赛网”)个人空间发布过一些与编程和开发相关的文章.从入行到现在,我至始至终乐于与网友分享自己的所学所得,希望会有更多的同我一样的业内朋友能够在事业上取得成功,也算是为我们的软件事业贡献自己的一份力量吧,这也是我在博客园建博客

微软Azure云之企业Exchange 2016部署13&mdash;DNS配置

本节我们来配置DNS域名解析. 因为本次Exchange部署在Azure公有云上,所有用户访问通过公网来进行连接,所以这里主要是公网DNS配置. 1.DNS正向解析 对于Exchange来说.如果邮件客户端仅仅使用MAPI模式连接,则需要配置mail.autodiscover.解析以及主域名的MX记录解析.如果需要其他如POP.SMTP.IMAP等服务时,有时为了区分服务DNS解析,也可以分别配置. 另外,这里设置了一条TXT解析:v=spf1 ip4: 13.78.59.202/32 –all

Azure Resource Manager 简介

Azure Resource Manager 简介? 注意 您当前查看的页面是未经授权的转载!查看最新版本请前往:http://www.cnblogs.com/qin-nz/p/azrue-resource-manager-introduction.html. 提示 本文更新时间:2016年01月01日. Azure 资源管理器 ( Azure Resource Manager ) 是微软新提供的一种管理Azure资源的一种模式. 这种管理的思想不仅出现在命令行和PowerShell中,也出现在

微软开放技术(中国)携 CKAN 和 OData 技术引入基于 Azure 的开放数据平台

今天,微软开放技术(中国)通过微软公有云Azure引入一个全新的开放数据平台,该平台基于开源数据门户解决方案 CKAN,以及由微软开放技术(中国)特别针对中国市场优化的ODATA插件来增强其国际化和本地化能力.此基于高性能云平台的开放数据解决方案,充分利用了中国软件开发市场上重要的技术方案,使得开源社区的开发者能轻易地访问流行的开放数据源. 全新的ODATA插件助力CKAN落地中国 10月21日,微软开放技术(中国)通过GitHub向CKAN的OData插件提交的代码已经被正式接受.我们此次的贡

windows azure 实例

1 public class Album : TableServiceEntity 2 { 3 } 4 public class PhotoAlbumDataContext : TableServiceContext 5 { 6 public PhotoAlbumDataContext() 7 : this(CloudStorageAccount.FromConfigurationSetting("DataConnectionString")) 8 { 9 } 10 11 public

Vbs脚本将本地文件上传到Azure存储账户

说到Azure相信大家都已经非常熟悉了,所以就不做多介绍了,我们都知道在Azure上有一个存储账户,在存储账户下可以可以创建容器,可以存放数据,近期公司呢为了达到数据的安全性,准备将本地的备份数据给Azure存储账户下备份一份: Azure提供了很多方法可以将本地的文件上传到Azure存储账户下,比如Powershell.Azcopy.存储文件管理工具,但是存储工具和powershell不支持断点续传,只有Azcopy支持断点续传,所以我们就用Azcopy进行数据的传输,在此说一下Azcopy也

基于Microsoft Azure、ASP.NET Core和Docker的博客系统

欢迎阅读daxnet的新博客:一个基于Microsoft Azure.ASP.NET Core和Docker的博客系统 2008年11月,我在博客园开通了个人帐号,并在博客园发表了自己的第一篇博客.当然,我写博客也不是从2008年才开始的,在更早时候,也在CSDN和系统分析员协会(之后名为"希赛网")个人空间发布过一些与编程和开发相关的文章.从入行到现在,我至始至终乐于与网友分享自己的所学所得,希望会有更多的同我一样的业内朋友能够在事业上取得成功,也算是为我们的软件事业贡献自己的一份力