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 发送电子邮件。虽然代码不多,但描述了整个操作过程,希望对朋友们有所帮助。
Azure : 通过 SendGrid 发送邮件的更多相关文章
- Azure 上通过 SendGrid 发送邮件
SendGrid 是什么? SendGrid 是架构在云端的电子邮件服务,它能提供基于事务的可靠的电子邮件传递. 并且具有可扩充性和实时分析的能力.常见的用例有: 自动回复用户的邮件 定期发送信息给用 ...
- 【Azure 应用服务】Azure Function App使用SendGrid发送邮件遇见异常消息The operation was canceled,分析源码逐步最终源端
问题描述 在使用Azure Function App的SendGrid Binging功能,调用SendGrid服务器发送邮件功能时,有时候遇见间歇性,偶发性异常.在重新触发SendGrid部分的Fu ...
- 如何使用SendGrid发送邮件
特别提示:本人博客部分有参考网络其他博客,但均是本人亲手编写过并验证通过.如发现博客有错误,请及时提出以免误导其他人,谢谢!欢迎转载,但记得标明文章出处:http://www.cnblogs.com/ ...
- sendGrid 纯文本的换行问题
项目中使用sendGrid发送邮件,并且要求纯文本格式,遇到了无法换行的问题(使用\r\n). 解决方案: 1. 在换行符前加空格(官方推荐的做法 https://sendgrid.com/docs/ ...
- 五分钟快速搭建 Serverless 免费邮件服务
1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...
- 五分钟快速搭建Serverless免费邮件服务
1. 引言 本文将带你快速基于 Azure Function 和 SendGrid 构建一个免费的Serverless(无服务器)的邮件发送服务,让你感受下Serverless的强大之处. 该服务可以 ...
- 30款提升组织效能 SaaS 工具,我们的宝藏工具箱大公开
熟悉 Juicedata 的小伙伴知道,从2017年成立到第一款产品发布.从寻找PMF(Product Market Fit) 到开源,我们一直保持着一个精简的团队配置,不少人都很好奇我们是如何做到的 ...
- .Net中使用SendGrid Web Api发送邮件(附源码)
SendGrid是一个第三方的解决邮件发送服务的提供商,在国外使用的比较普遍.国内类似的服务是SendCloud.SendGrid提供的发送邮件方式主要是两种, 一种是SMTP API, 一种是Web ...
- 基于Windows Azure 搭建基于SharePoint 2010 Intranet、Extranet、Internet (4): 配置传出邮件服务: 使用 outlook.com 发送邮件通知
前几篇文章,已经安装了SharePoint 2010,今天将演示如何配置传出邮件.由于某些原因,企业可能没有安装自己邮件服务器,此时我们可以使用公共的邮箱服务来发送邮件通知,比如outlook.com ...
随机推荐
- TexturePacker的plist切成单独小图片
工具原料 Python 2.7 安装环境 1.安装 Python 2.7 https://www.python.org/download/ 2.配置环境变量 Path :C:\Python27 pyt ...
- dll动态链接库导出函数方法 -- 静态导出(__declspec前缀导出)
简介 在之前已经笔者已经写过利用.def文件进行dll函数动态导出的文章,那么今天就给大家介绍一下,如何利用**__declspec**函数前缀进行简单的静态函数导出. 要点 大家阅读过动态导出的文章 ...
- SASS对css的管理
一.SASS简介 SASS是一种CSS的开发工具,提供了许多便利的写法,大大节省了设计者的时间,使得CSS的开发,变得简单和可维护. 本文总结了SASS的主要用法.我的目标是,有了这篇文章,日常的一般 ...
- 设置webstorm支持ES6语法
1. 点击File目录下的Default Settings 2. 再依次点击Languages & Frameworks -----> JaveScript ----> ...
- go变量和常量
一.变量 1. 命名规则:字母或者_下划线开头 2.“:=” 这种模式只能用于函数内部,常量const不能用这种模式来定义 二.常量 1. 常量const必须在定义的时候就赋值 2. 常量的值在整个过 ...
- git回答整理
1.git常用命令 首先明确:git有工作区.暂存区.版本库,工作区是电脑里能看到的目录 创建仓库: git init newrepo,使用我们指定目录作为Git仓库(初始化后,会在newrepo目录 ...
- rpm安装MySQL5.5后配置,在centos5上;mysql编译安装在centos6.5上;
[1] 没有/etc/my.cnf: rpm包安装的MySQL是不会安装/etc/my.cnf文件的:处理:cp /usr/share/mysql/my-huge.cnf /etc/my.cnf [2 ...
- OpenCV——直方图计算、寻早最值位置和对比匹配(判断两幅图的相似程度)
- POJ 3687 Labeling Balls(反向拓扑+贪心思想!!!非常棒的一道题)
Labeling Balls Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 16100 Accepted: 4726 D ...
- jqgrid 宽度自适应
当jqgrid所在操作区宽度大于了给各列设置宽度之和时,此时表格的宽度未铺满操作区,效果不理想 此时,可以通过配置宽带自适应来现实表格内容自动铺满. 配置属性 shrinkToFit:ture 若要启 ...