• 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 发送电子邮件。虽然代码不多,但描述了整个操作过程,希望对朋友们有所帮助。

  • 相关阅读:
    Java设计模式系列之策略模式
    设计模式系列之热身
    算术表达式系列之后缀表达式求值
    算术表达式系列之中缀表达式转后缀表达式
    Maven下使用Junit对Spring进行单元测试
    Windows命令行使用总结(持续更新)
    Eclipse中web项目部署至Tomcat步骤
    MyBatis保存完整日期的解决方法
    Redis(一)源码安装
    【集成学习】sklearn中xgboost模块中plot_importance函数(绘图--特征重要性)
  • 原文地址:https://www.cnblogs.com/sparkdev/p/7028977.html
Copyright © 2020-2023  润新知