Azure 上通过 SendGrid 发送邮件

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/powertoolsteam/article/details/53607530

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

展开阅读全文

通过配置app.config发送邮件

07-02

我只会这样写 要求把发件人邮箱地址 用户名 密码 跟 收件人邮箱地址 写到app.config中。rn还要求给个变量 把邮件主题内容赋给变量 不同的邮件对应不同的效果 app。config怎么配置rn[code=csharp]rn private void button1_Click(object sender, EventArgs e)rn rn MailAddress Messagefrom = new MailAddress("发件人邮箱地址"); rn string MessageTo = " 收件人邮箱地址"; rn string MessageSubject = "测试例子"; //邮件主题rn string MessageBody = "测试的例子终于成功了。"; //邮件内容rn if (Send(Messagefrom, MessageTo, MessageSubject, MessageBody))rn rn MessageBox.Show("OK");rn rn elsern rn MessageBox.Show("NO");rn rnrn rn public static bool Send(MailAddress Messagefrom, string MessageTo, string MessageSubject, string MessageBody)rn rn MailMessage message = new MailMessage();rn message.From = Messagefrom;rn message.To.Add(MessageTo); //收件人邮箱地址可以是多个以实现群发rn message.Subject = MessageSubject;rn message.Body = MessageBody;rn message.IsBodyHtml = true; //是否为html格式rn message.Priority = MailPriority.High; //发送邮件的优先等级rn SmtpClient sc = new SmtpClient();rn sc.Host = "smtp.qq.com"; //指定发送邮件的服务器地址或IPrn sc.Port = 25; //指定发送邮件端口rn sc.UseDefaultCredentials = true;rn sc.EnableSsl = true;rn sc.Credentials = new System.Net.NetworkCredential("指定登录服务器的用户名和密码"); rn tryrn rn sc.Send(message); //发送邮件rn rn catch (Exception e)rn rn MessageBox.Show(e.Message);rn return false;rn rn return true;rn rn[/code] 论坛

没有更多推荐了,返回首页