SendGrid 是什么?

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

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

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

由于使用 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 发送邮件相关推荐

  1. azure服务器_如何使用Azure Functions和SendGrid构建无服务器报表服务器

    azure服务器 It's 2018 and I just wrote a title that contains the words "Serverless server". L ...

  2. 在 Azure 上部署 Asp.NET Core Web App

    在云计算大行其道的时代,当你要部署一个网站时第一选择肯定是各式各样的云端服务.那么究竟使用什么样的云端服务才能够以最快捷的方式部署一个 ASP.NET Core的网站呢?Azure 的 Web App ...

  3. 最大的ai计算机模型,Microsoft构建了世界排名前五的超级计算机,用于在Azure上训练大型AI模型...

    [TechWeb]据国外媒体报道,5月20日,微软在年度开发者大会Build 2020上宣布,它将建造世界排名前五的超级计算机. Microsoft 微软表示,它与非营利性人工智能组织OpenAI独家 ...

  4. Azure上的VM代理及可扩展程序

    继续上一篇(http://maomaostyle.blog.51cto.com/2220531/1558301)文章说点额外内容,在Azure上部署虚机时会默认装载一个代理程序,而通过这个代理进程就可 ...

  5. 在Azure上创建MYSQL服务

    Azure和所有的云服务一样,也提供了MYSQL数据库,在Azure中叫mysql database on azure.下面我们来一起在Azure上创建一个Mysql数据库. 在新建--> 数据 ...

  6. 快速学习使用 Windows Azure 上的 SharePoint Server 2013

     为了在当今的企业环境中占据一席之地,您需要能够迅速顺应变化和应对挑战.有时,需要及时调整您的SharePoint 基础结构以保持竞争优势. 基础结构即服务可通过随时使用.即付即用的解决方案应对这 ...

  7. (译)如何用命令行在windows Azure上安装负载平衡的web Farm虚拟机(linux或其他)...

    我一哥们考虑把他的一些基于linux的网站移到Azure上.如果你现在的网站是node.js, ASP,ASP.NET,或PHP做的,使用Azure web站点是最容易的.我会在这篇文章里向你展示如何 ...

  8. 21.Azure备份Azure上的虚拟机(下)

    如果您喜欢我的文章,请在右上角处点击<关注>支持一下,谢谢! 接下来可以利用恢复点对虚拟机进行恢复,恢复分为2种,一种是文件恢复,可以选择恢复点对小于10G的文件以挂在虚拟磁盘的方式进行复 ...

  9. Azure上基于HTTP trigger的Lambda Function

    Azure上通过HTTP方式触发的Lambda Function,函数体直接在浏览器里编写: 存储在Azure云端的index.js里: 点击get function url拿到该函数的调用链接,直接 ...

最新文章

  1. Pycharm报错合集:在pycharm运行anaconda配置的Pytorch环境报错(Environment location diretory is not empty )
  2. c++ 调用python2类获取返回值
  3. 《淘宝网开店 拍摄 修图 设计 装修 实战150招》一一1.2 选购镜头时应注意的事项...
  4. Mac提示app损坏、Error,Mac电脑最常见错误的解决方案
  5. redirect_uri 域名与后配置不一致是什么意思_免费 amp; 无限的域名/企业邮箱
  6. VMware 虚拟机扩展Ubuntu系统磁盘空间
  7. torch.index_select与torch.gather
  8. 用数组建立二叉树(LeetCode二叉树测试)
  9. TCP的三次握手和四次挥手(超详解)
  10. jQuery源码解析
  11. matlab list函数参数,Matlab 函数参数汇总
  12. 如何给计算机安装驱动程序,电脑系统怎么安装驱动程序
  13. 电脑有必要安装杀毒软件吗?
  14. 【吐血推荐】技术人员的发展之路
  15. 百度直播消息系统的实践和演进
  16. C语言--tips1
  17. 混合整数线性规划——切割平面
  18. windows 安装apex_apex 安装/使用 记录
  19. 猪呀,羊呀,送到哪里去?
  20. 遗传算法求解3D打印中零件二维排布问题(MATLAB实现)

热门文章

  1. PTMs-ALBERT
  2. 七层网络性能基准测试中的协调遗漏问题--Coordinated Omission
  3. 为什么加泪滴,Allegro如何加泪滴?
  4. sqoop -D 指定资源池( mapred.job.queue.name=root.myqueue)或者( mapred.job.queuename=root.myqueue)
  5. VMware无法注册的问题所在
  6. CSS 第005 背景-理论
  7. React 接入 Ueditor + xiumi
  8. 计算机机房防火门,弱电机房门为防火门吗
  9. 使用parent.layer.open()打开页面如何调用子页面的方法
  10. BAT薪资大揭底:AI程序员80万太少!程序员薪资的天花板在哪?