基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

创建账号:如何创建并激活新的 AWS 账户?, AWS(亚马逊云)注册与信用卡验证教程, 亚马逊云(AWS)注册账号和启动服务器EC2(centos镜像)教程

 

简介

通常情况下我们使用 smtp 调用第三方的 api 发送邮件,但是 gmail 一天只能发送100封,这对于营销邮件来说无疑是非常大的影响。所以考虑两种方案,第一种自己搭建邮件服务器,这种方案耗费时间并且需要额外的服务器成本。第二种方案使用 Amazon SES 搭建有限服务。简单方便并且 Amazon 本身也做了一些优化。

 

域名准备

 

购买域名

这一步不在本文的范围只,但是你需要需要准备好一个域名。

 

托管域名到 Route53

Route53 是Aws的 DNS,不托管用自己的也行,用他的一个方便之处是配置SES的时候他会很好的给你继承好,省去好多自己配置的麻烦。不过本身托管域名也需要配置,所以这里自行考虑是否托管域名到Route53。如需配置如下是配置文档。 https://docs.aws.amazon.com/zh_cn/Route53/latest/DeveloperGuide/migrate-dns-domain-in-use.html
如果是gmail,在gmail的服务里面也会明确的写着怎么迁移。 通常情况下如下输入记录到Route53作为验证。

ns-***.awsdns-49.net.
ns-***.awsdns-50.org.
ns-***.awsdns-22.co.uk.
ns-***.awsdns-59.com.

 

配置 Amazon SES

进入aws 控制台,进入Simple Email Service(SES),点击 domains -> Verify a New Domain。

 

本篇文章记录了本人使用 AWS 的 SES 发送邮件的心得,以下的操作都是基于 AWS 提供的SES 服务的文档,读者在使用 AWS 的邮件服务遇到困惑时,不妨阅读下本篇文章,希望会给你提供一些帮助。

Simple Email Service 简称 SES 是 AWS 的邮件服务,除了有基本的发送邮件的功能,还可以对邮件的事件进行监控,进而获取一些数据,用于以后的分析。 邮件事件分为以下几种:

  • 发送 – 对 Amazon SES 的调用已成功且 Amazon SES 将尝试发送电子邮件。
  • 拒绝 – Amazon SES 接受了电子邮件,并确定电子邮件中包含病毒,然后拒绝了电子邮件。Amazon
    SES 未尝试将电子邮件发送到收件人的邮件服务器。
  • 退回邮件 – 收件人的邮件服务器永久拒绝了电子邮件。此事件对应查无此人的邮件。只有当 Amazon
    SES 重试一段时间后仍无法发送邮件时才包括软退回邮件。
  • 投诉 – 已将电子邮件成功发送给收件人。收件人将电子邮件标记为垃圾邮件。
  • 送达 – Amazon SES 已将电子邮件成功送达至收件人的邮件服务器。
  • 打开 – 收件人收到了邮件并在其电子邮件客户端中打开了邮件。
  • 点击 – 收件人点击了电子邮件中包含的一个或多个链接。
  • 呈现失败 – 由于模板呈现问题,未发送电子邮件。此事件类型仅在您使用 SendTemplatedEmail 或
    SendBulkTemplatedEmail API 操作发送模板化电子邮件时发生。当模板数据丢失或模板参数与数据
    不匹配时,可能会发生此事件类型

如果是向用户发送营销邮件,则可以通过这些事件,监控到用户填写的邮箱是否正确、邮件是否成功的发送到用户的邮箱、用户有没有查看邮件、邮件里面附带的营销链接有没有被点过等,然后根据这些数据对邮件的内容进行调整,以达到最好效益。

 

项目背景

我们的项目是针对于 B 端的用户,B 端用户可以实现给他的客户进行自动去信。

B 端用户要设置发件人、发件箱(以 B 端用户的名义发邮件)以及发送邮件的模板,B 端用户还有一个客户邮箱的列表,满足一定的条件之后,我们的系统会给他的客户按照他提供的模板发送邮件。

B 端用户还可以看到他发给客户邮件的送达率、打开率、邮件内的链接的点击率等统计类的信息。

接下来就是具体开发的流程了:

 

验证发件箱

如果要使用 AWS 发送邮件,第一步就是要验证发件箱,而且这个步骤是必须的。之所以需要验证,是因为为了防止垃圾邮件以及诈骗邮件,
试想:如果我以admin@qq.com的名义发送邮件给某人,提示他 QQ 的账号密码有问题,让他将原有的账号密码发我,这样其 QQ 号就被盗了,当然这只是最简单的例子。

验证邮件的发件箱有两种方式:

  1. 验证域名
  2. 验证邮箱

 

验证域名

比如,谷歌的邮箱:ikeepstudying@gmail.comgmail.com即是这个邮箱的域名,而ikeepstudying是邮箱的用户名。

验证域名是为了验证这个域名是为你所有的,需要在域名解析里面进行配置。由此可见,gmail.com或者qq.com这些域名你是没办法验证的,因为他们分别属于谷歌和腾讯。

当我购买了一个域名,如:ikeepstudying.com,其使用权为我所有,那么这个域名就可以在 AWS 上进行验证。验证时,AWS 会提供几条域名解析的记录,然后登上自己使用的域名解析服务商的控制台,添加进去这几条记录就大功告成了!

当我验证成功ikeepstudying.com这个域名之后,那么就可以使用它发送邮件了,而用户名是可以任意填的,比如说以admin@ikeepstudying.comsupport@ikeepstudying.com这些名义发送邮件都是 OK 的。

 

验证邮箱

验证域名看起来比较麻烦,那么也可以采用验证邮箱的方式。

比如,我就是想以ikeepstudying@gmail.com的名义发邮件,这个时候就要在 SES 服务上验证此邮箱,然后 AWS 会给此邮箱发送一封激活邮件,点击里面的链接就验证成功了,之后就可以用ikeepstudying@gmail.com的名义发邮件了,而且激活邮件的内容是可以自定义的。

在我的应用场景下,就是去采用验证邮箱的方式动态的验证 B 端用户的发件箱。

这种方式有以下的缺点:

  1. AWS 对验证邮箱以及域名做了个数的限制,最多有 10000 个验证的邮箱或域名
  2. 验证邮箱需要额外的给用户发送邮件去激活
  3. AWS 对验证的接口请求做了限制,最多一秒一次请求

这也是因为 AWS 对于发件箱必须要进行验证的缘故,如果不考虑垃圾邮件、诈骗邮件,而是希望用户的发件箱可以任意填写时,就只能采用其他的邮件服务了…诸如:sendgird

验证完邮箱后就可以发送邮件了!

 

解决Amazon SES发送邮件限制问题

1、初次使用Amazon SES,最大的问题就是“沙盒”模式,即账号需要发送若干个测试邮件后Amazon SES才会自动解除配额限制。如果你嫌这个太慢了,可以发送Tickets给客服。

2、Amazon SES最开始只能向已经验证过的邮箱或者域名发送邮件,要发送邮件先在Amazon SES中添加邮箱。

3、输入邮箱验证,Amazon SES会向这个邮箱发送一个带有验证链接的邮件,点击验证后就可以发送邮件了。

4、添加验证的域名方法也是一样。

5、输入域名时记得勾选“Generate DKIM Setting”。

6、确定后就会有域名的TXT和CNAME记录。

7、到你的域名DNS管理处添加TXT和CNAME记录,成功验证了域名后就可以向所有该域名的邮箱发送邮件了。

 

发送邮件

一种是通过 HTTP 请求调用 API,一种是通过 SDK 的方式去请求 AWS 的接口。简单点还是通过 SDK 的方式去做吧!

 

第 1 步:进入 Amazon SES 控制台

当您单击此处时,AWS 管理控制台将在新的浏览器窗口中打开,因此您可以将本分步指南保持打开状态。要打开 Amazon SES 控制台,请在 Application Services(应用程序服务)下查找并选择 SES

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

第 2 步:验证电子邮件地址

在使用 Amazon SES 发送电子邮件之前,您必须通过 Amazon SES 来验证地址(或地址的域),以证明您拥有发件人的电子邮件地址。如果您是 Amazon SES 的新用户,则还必须验证收件人的地址,因为您的账户处于名为 Amazon SES 沙盒的测试环境中。您可以稍后申请移出沙盒并解除收件人地址限制。

在本教程中,您将使用相同的电子邮件地址发送和接收电子邮件。

 

a. 在 Amazon SES 控制台的左侧导航窗格中,在 Identity Management(身份管理)下,选择 Email Addresses(电子邮件地址)

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

b.选择 Verify a New Email Address(验证新电子邮件地址)

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

c.输入您的电子邮件地址,然后选择 Verify This Email Address(验证此电子邮件地址)

此时,Amazon SES 将向该地址发送验证电子邮件。

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

d.登录您用于接收上一步中输入的电子邮件地址发送的电子邮件的电子邮件客户端。在电子邮件客户端中,打开来自 Amazon Web Services 的邮件,该邮件要求您确认您拥有该电子邮件地址。单击邮件中的链接。

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

e.返回 Amazon SES 控制台,使用控制台右上方附近的刷新按钮刷新身份列表。确认 Amazon SES 控制台中电子邮件地址的状态是已验证

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

第 3 步:发送电子邮件

您已经验证了电子邮件地址,现在您可以发送电子邮件了。借助 Amazon SES,您可以通过三种方式发送电子邮件:使用控制台、使用简单邮件传输协议 (SMTP) 接口或使用 API

本教程展示如何使用最简单的方法,也就是控制台。在开始使用 Amazon SES 之后,建议您使用 SMTP 接口或 API 发送电子邮件,因为您可以通过编程方式访问它们。

借助 Amazon SES,您可以发送已设置格式的电子邮件或原始电子邮件。如果您选择已设置格式的电子邮件,Amazon SES 将会为您设置电子邮件的格式。如果您选择原始电子邮件,则您必须手动设置电子邮件的格式,以便更好地控制电子邮件标题和消息的显示方式。在本教程中,我们使用原始格式,以便可以展示如何发送 HTML 格式的电子邮件。

 

a.在 Amazon SES 控制台中,选择刚刚验证的电子邮件地址左侧的按钮,然后选择 Send a Test Email(发送测试电子邮件)

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

b.在 Send a Test Email(发送测试电子邮件)对话框中,使用以下值,然后选择 Send a Test Email(发送测试电子邮件)

  • Email Format(电子邮件格式) – 选择 Raw(原始)
  • To(收件人) – 输入您验证的电子邮件地址。
  • Message(消息) – 将以下文本复制粘贴到框中,如图所示。

重要提示:将消息文本粘贴到框中之后,请删除“主题”行之前的所有空白行,以便正确设置接收到的消息的格式。

主题:Amazon SES 测试
MIME-Version: 1.0
内容类型:text/html

<!DOCTYPE html>
<html>
<body>
<h1>您已成功使用 Amazon SES 发送一封电子邮件!</h1>
<p>有关 Amazon SES 的更多信息,请参阅 <a href=”http://docs.aws.amazon.com/ses/latest/DeveloperGuide/Welcome.html”>Amazon SES 开发人员指南</a>。</p>
</body>
</html>

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

c.登录您向其发送电子邮件的地址的电子邮件客户端。您将找到您发送的邮件。如果找不到,请检查垃圾邮件文件夹。

基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战
基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

恭喜您!

您已经使用 Amazon SES 发送了第一封电子邮件。

 

使用 Amazon SES SMTP 还是 API ?

 

 

 

指路 1:使用 Amazon SES SMTP 接口发送电子邮件

使用软件开发工具包和工具开始进行构建

 

 

软件开发工具包


 

 

 

命令行工具


 

 

 

 

 

 

 

 

 

代替方案,如果不考虑aws,也可以考虑Mailgun

 

Mailgun官网:http://www.mailgun.com/
1、Amazon SES和Mailgun免费配额都非常大,足够一般的网站使用,对于每天有上万封邮件的发送量,使用它们的付费服务也很划算。但是这两个邮箱服务的服务器都是在国外,如果你的主机在国内,那么在调用API时要考虑到服务器连接的问题。
2、实际使用过程中发现,Amazon SES在QQ邮箱有被拒收的情况,所以如果你的客户邮箱都是国内的可以考虑使用国内的邮件发送服务,如果你的客户邮箱以国外的居多,那么Amazon SES和Mailgun有优势,当然也可以两者搭建起来使用。

 

 

总结

以上就是本人使用 AWS 的 SES 在项目中的应用,SES 服务还支持标签的操作,也支持简单的统计。但是其局限性也在于发件箱是不能随意填写的,而且还需要使用配套的其他服务。

希望以上文章对你有一些帮助

 

AWS 入门基础课程

从 0 到 1 轻松上手云服务,内容涵盖:成本管理,上手训练,开发资源

 

 

本文:基于 Amazon SES 搭建高可用的邮件系统, AWS SES邮件群发服务配置教程, 亚马逊的邮件服务(SES)发送邮件实战

 

 

 

 

Add a Comment

Your email address will not be published.

Time limit is exhausted. Please reload CAPTCHA.