Azure 上通过 SendGrid 发送邮件

Stella981
• 阅读 559

SendGrid 是什么?

SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递。

并且具有可扩充性和实时分析的能力。常见的用例有:

  • 自动回复用户的邮件
  • 定期发送信息给用户
  • 生成报表等

由于使用 SendGrid 这样的第三方邮件服务既稳定可靠又不用自己维护邮件服务器,并且对于邮件发送量不大的应用,免费发送的邮件数 (每个月25000封)已经可以满足需求。所以越来越多的应用都开始使用这种邮件服务来发送邮件。

下面我们从 Azure 上创建 SendGrid 账号开始,介绍如何通过 SendGrid 发送邮件。

创建 SendGrid 账号

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

Azure 上通过 SendGrid 发送邮件

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

Azure 上通过 SendGrid 发送邮件

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

Azure 上通过 SendGrid 发送邮件

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

Azure 上通过 SendGrid 发送邮件

在使用 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,所以要指定安装的版本。

Azure 上通过 SendGrid 发送邮件

发送测试邮件

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

// 请使用前面介绍的被 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 = "

Hello World!

";

// 通过异步方法发送邮件。

transport.DeliverAsync(myMessage);

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

发送带附件的邮件

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

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

已知问题

如果你有一个非常顽固的用户,他要求你发出的邮件内容必须是纯文本的形式 (主要是为了保持手动创建的各种换行和缩进),不能是 HTML 格式的,这将会是一个不小的挑战。因为 SendGrid 默认把邮件内容包成了 HTML 格式。不过我们还是有方法满足客户的,你可以尝试在每一行文本前面添加一个半角的空格,这也是 SendGrid 官方给出的方法。

其实,还有另外一种方式可以实现类似的效果。那就是把所有的文本内容放到 html 的

元素中,代码也很简单:

message.Html = string.Format("

{0}
", System.Web.HttpUtility.HtmlEncode(message.Text));

总结

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

点赞
收藏
评论区
推荐文章
blmius blmius
2年前
MySQL:[Err] 1292 - Incorrect datetime value: ‘0000-00-00 00:00:00‘ for column ‘CREATE_TIME‘ at row 1
文章目录问题用navicat导入数据时,报错:原因这是因为当前的MySQL不支持datetime为0的情况。解决修改sql\mode:sql\mode:SQLMode定义了MySQL应支持的SQL语法、数据校验等,这样可以更容易地在不同的环境中使用MySQL。全局s
皕杰报表之UUID
​在我们用皕杰报表工具设计填报报表时,如何在新增行里自动增加id呢?能新增整数排序id吗?目前可以在新增行里自动增加id,但只能用uuid函数增加UUID编码,不能新增整数排序id。uuid函数说明:获取一个UUID,可以在填报表中用来创建数据ID语法:uuid()或uuid(sep)参数说明:sep布尔值,生成的uuid中是否包含分隔符'',缺省为
Karen110 Karen110
2年前
手把手教你使用Python轻松搞定发邮件
前言现在生活节奏加快,人们之间交流方式也有了天差地别,为了更加便捷的交流沟通,电子邮件产生了,众所周知,电子邮件其实就是客户端和服务器端发送接受数据一样,他有一个发信和一个收信的功能,电子邮件的通信协议为SMTP,POP3,IMAP,而且他们都属于tcp/ip协议,像我们经常用到的QQ邮箱,网易邮箱,这些都是同样的模式。准备编辑器:sublime
Karen110 Karen110
2年前
赶在元旦前夕!10分钟用Python批量定制化发送元旦祝福邮件!
上一篇关于邮件的自动发送教程中,我们讲解了如何使用yagmail进行简单的邮件发送:现实生活中,如果只是发邮件给自己,像上一篇文章那样简陋的格式是可以接受的,但若要针对每个人进行邮件的定制化,群发给公司客户、内部员工、亲戚朋友,则需更加高级的邮件发送方式。我们可以通过HTML制作一封精美的元旦祝福邮件,但是邮件的内容——比如姓名、祝福语等应该怎样动态
Wesley13 Wesley13
2年前
JavaMail发送和接收邮件API(详解)
一、JavaMail概述:    JavaMail是由Sun定义的一套收发电子邮件的API,不同的厂商可以提供自己的实现类。但它并没有包含在JDK中,而是作为JavaEE的一部分。    厂商所提供的JavaMail服务程序可以有选择地实现某些邮件协议,常见的邮件协议包括:SMTP:简单邮件传输
Easter79 Easter79
2年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
2年前
C++基于Smtp协议发送邮件
SMTP协议的定义:  SMTP是一种TCP协议支持的提供可靠且有效电子邮件传输的应用层协议;  SMTP是建立在TCP上的一种邮件服务,主要用于传输系统之间的邮件信息并提供来信有关的通知;  SMTP独立于特定的传输子系统,且只需要可靠有序的数据流信道支持;  SMTP重要特性之一是其能跨越网络传
Stella981 Stella981
2年前
SpringBoot入门 (十) 发送邮件
本文记录学习在SpringBoot中发送邮件。一邮件发送过程发送邮件是一个我们在项目中经常会用到的功能,如在用户注册时发送验证码,账户激活等都会用到。完整的一个邮件发送过程主要包含以下几个步骤:1发件人在用户邮件代理上写邮件内容及收件人的邮箱地址;2用户邮件代理根据发件人填写的邮件信息,生成一封符合邮件格式的邮件;
Stella981 Stella981
2年前
Linuxprobe15
电子邮件系统简单邮件传输协议(SimpleMailTransferProtocol,SMTP):用于发送和中转发出的电子邮件,占用服务器的25/TCP端口。邮局协议版本3(PostOfficeProtocol3):用于将电子邮件存储到本地主机,占用服务器的110/TCP端口。Internet消息访问协议版本4(In
Wesley13 Wesley13
2年前
Exchange Server 的OWA 邮件签名大小限制
随着电子邮件的普及应用,五花八门的邮件签名也随着每个人的创意诞生了。作为ExchangeServer的客户端访问方式之一,OWA也同样提供了邮件签名的设置选项。但是,有时用户会发现,当他想在OWA中为自己的邮箱设定一个COOL的邮件签名时,有可能会得到“未保存您的更改,因为电子邮件签名过大。请使用较小的格式。”这样的错误。为什么?原来OWA邮件签名大小也