使用Amazon SES做邮件群发

2013年6月20日 | 分类: 【技术】

Amazon Simple Email Service(SES) (SES)是构建在Amazon基础设施之上的批量、事务性的邮件发送服务,多年来已经向无数客户发送了大量邮件。SES的主要任务之一就是提供这样一个服务:可以发送不被目标ISP拒绝的大量邮件,因为ISP会强制使用过滤手段以处理垃圾邮件,Amazon SES的技术程序经理Chris Wheeler强调说:

在发送第一封邮件前,你必须得做好规划。否则,你的邮件就会被放到垃圾目录中,也有可能发不出去,还有可能再也无法发送了。

为了避免有人使用SES发送垃圾邮件,Amazon使用了几个策略。在发送前会通过编程的方式扫描每封邮件以确定是否是垃圾邮件,是否包含了恶意软件。被Amazon过滤器打上spam标签的消息是不会发送出去的,同时会告知用户,这样他们就能修改邮件内容了。如果消息通过了Amazon过滤器但由于垃圾邮件的原因被目标ISP拒绝的话也会告知用户。这样Amazon就能掌握某些用户发送的邮件质量了,Amazon可以暂停某些发送垃圾邮件的账户,然后执行进一步的调查。

接下来,想要使用该服务的公司可以从一个“沙箱”开始,这是一个有限制的SES账户,每天最多可以发送200封邮件,每封邮件都需要发送给经过证实的地址才行。这有助于开发和测试发送邮件的应用,通过发送能够穿越过滤器的邮件可以获得良好的声誉。接下来就可以使用产品账户了,该账户可以向未经证实的地址发送邮件,但每天最多可以发送1,000封。这种限额可以根据用户的需要和其他几个因素(发送的邮件数量、拒绝的邮件数量以及由其产生的投诉数量)进行增加。当所有条件都满足,3天后限额就会提高到每天10,000封邮件,2周后又会提高到每天1M封邮件。每秒所能发送的邮件数量也有一个限制,开始是每秒一封邮件,最高是每秒90封邮件。联系Amazon并得到特殊的批复后每天或每秒就可以发送更多的邮件了。整个过程都是为了确保用户不会使用SES发送垃圾邮件。

可以使用编程的方式通过API访问SES,API中包含了验证地址、发送邮件、获得发送统计数据的方法。还可以使用命令行工具,或是通过SES路由Mail Transfer Agent

如果你是EC2服务的用户并且每天发送的邮件数量不超过2,000封,那就可以免费使用Amazon SES。需要发送更多邮件的用户就需要付费了,价钱是每1,000封邮件$0.10。额外的费用用于支付进出Amazon的数据流量

查看英文原文:Sending Bulk Emails with Amazon SES

Amazon Simple Email Service (Amazon SES) (Beta)

Amazon Simple Email Service (Amazon SES) 是面向企业和开发人员的、高度可扩展和经济高效的批量事务处理电子邮件发送服务。有了 Amazon SES,用户不必再面临构建内部电子邮件解决方案,或许可、安装和运作第三方电子邮件服务所产生的复杂性,也不必承担高昂的费用。该服务可与其他 AWS 服务集成,使得从 Amazon EC2 等服务中托管的应用程序发送电子邮件变得轻松简单。有了 Amazon SES,企业从此告别了长期使用承诺、最低消费或讨价还价 – 他们可以先利用免费使用套餐,之后再享受按已发电子邮件数量收取的低廉费用和数据传输费。

在构建大规模电子邮件解决方案来发送市场营销和事务处理邮件时,企业常常面临着复杂而代价高昂的挑战。为了优化电子邮件成功送达的百分比,企业必须处理各 种麻烦,例如电子邮件服务器管理、网络配置,符合 Internet 服务提供商 (ISP) 对电子邮件内容的严格标准等。此外,许多第三方电子邮件解决方案要求签署合同和协商价格,而且还需要大量的前期费用。

Amazon SES 解决了这些难题,Amazon.com 在这方面积累了多年经验,并且为服务自身的庞大客户群而构建了完善的电子邮件基础设施,这些都能让各企业获益良多。现在,只需通过 SMTP 或简单的 API 调用,企业就能访问高质量的可扩展电子邮件基础设施,以实惠的价格与客户进行高效的沟通。为了达到较高的电子邮件送达率,Amazon SES 使用内容筛选技术扫描企业的外发电子邮件,帮助其确保内容符合 ISP 标准。然后,电子邮件将在队列中等待发送,或返回至发件人进行纠正。为帮助企业进一步提高与其客户进行电子邮件沟通的质量,Amazon SES 提供了内建反馈循环,其中包括退回邮件、送达失败和成功以及垃圾邮件投诉的通知等。

动手使用 Amazon SES:

  1. 立即注册
  2. 验证发件地址或域。
  3. 发送测试邮件。
  4. 请求生产环境访问权限。
  5. 增加配额。

Amazon SES 功能

Amazon SES 让您以快速而经济的方式向客户发送群发和事务处理电子邮件。要使用 Amazon SES,您只需:

  • 注册:注册后,您可以访问 Amazon SES 沙盒 专门为开发人员测试和评估该服务而设计的环境。
  • 验证域或电子邮件地址:在通过 Amazon SES 发送电子邮件之前,需要验证您对用于发送电子邮件的域或地址的所有权。要启动验证过程,请访问 AWS 管理控制台
  • 请求生产环境访问:一旦准备好使用 Amazon SES 发送电子邮件,您便可以请求生产环境访问了。这使您能够从沙盒环境转移到生产环境,并开始向客户发送电子邮件。只需几分钟就能申请生产环境访问权限,而且通常会在 24 小时内收到回复。
  • 发送电子邮件:您可以轻松使用 SMTP 或两个不同的 API 中的一个来为电子邮件排队准备发送。
  • 获取反馈:Amazon SES 提供了有关您的发送活动的有用统计数据。通过简单的查询或访问 AWS 管理控制台,您就能快速获取重要的统计数据,如发送量、退回邮件数和投诉数量等。您也可以通过向 Amazon SES Mailbox Simulator 电子邮件地址发送电子邮件来接收模拟电子邮件回复。

服务亮点

简单 – Amazon SES 消除了许可、安装和操作第三方服务,或者构建和维护内部托管电子邮件解决方案时所产生的复杂性。通过 Amazon SES 发送电子邮件就像使用 SMTP 或调用 API 一样简单,Amazon SES 让您可以轻松监控发件活动和送达率统计数据。
实惠 – 使用 Amazon SES 没有前期费用或固定开支,而且您还可以从 Amazon 的规模效益中获益。唯一的成本是针对已发送电子邮件数量收取的低廉费用和数据传输费。
可靠 – Amazon SES 在 Amazon 成熟的网络基础设施和数据中心内运行。所有外发的电子邮件冗余存储到多台服务器和数据中心,提供高可用性和数据耐久性。
可扩展 – Amazon SES 基于可扩展的技术,而 Amazon 的全球网站正是凭借这种技术每年发送了数十亿封电子邮件。
可与其他 Amazon Web Services 搭配使用 – 您可以在 Amazon Simple Notification Service (Amazon SNS) 中跟踪您的退回邮件和投诉,并且仅需点击几下鼠标,您就能设置 Easy DKIM 或验证您通过 Amazon Route 53 管理的域。对于来自 Amazon EC2 和 AWS Elastic Beanstalk 的电子邮件,还有免费使用套餐。

定价

仅按使用情况付费。没有最低消费。

免费套餐:如果您是 Amazon EC2 用户,您可以免费试用 Amazon SES。当您从 Amazon EC2 实例直接或通过 AWS Elastic Beanstalk 调用 Amazon SES 时,您可以每天免费发送 2,000 封电子邮件。许多应用程序都能完全在这一免费套餐的限定内地运行。

注:数据传输费仍适用。对于符合 AWS 免费使用套餐条件的新 AWS 客户,您在所有 AWS 服务中总计可获得 15 GB 传出数据量,这应当能弥补您的 Amazon SES 数据传输费用。此外,所有 AWS 客户可以每月可获得 1GB 数据传输量。

电子邮件*

  • 电子邮件费用为每 1000 封 0.10 USD。

*一封邮件的定义为发送至一个电子邮件地址的一次电子邮件通信。发送给多个收件人的一次电子邮件通信将视为分别向每个收件人发送一封邮件。

数据传输

数据传入
所有数据传输 每 GB 0.00 USD
数据传出
每月第一个 GB 每 GB 0.00 USD
每月不超过 10 TB 每 GB 0.12 USD
每月下一个 40 TB 每 GB 0.09 USD
每月下一个 100 TB 每 GB 0.07 USD
每月下一个 350 TB 每 GB 0.05 USD
每月下一个 524 TB 联系我们
每月下一个 4 PB 联系我们
每月超过 5 PB 联系我们

数据“传入”和“传出”是指传入和传出 Amazon SES。

附件

  • 每发送 1 GB 附件 0.12 USD。

传送

送达率这个术语指的是您发出的电子邮件实际上能够到达其预期目的地的可能性。

遗憾的是全球电子邮件流量中很大一部分属于垃圾邮件 – 不请自来的或不想收到的群发邮件。ISP 配备了自动筛选器,可以检测看似垃圾邮件的电子邮件,并防止递送这些邮件。您通过 Internet 发送的大多数电子邮件会受到一家或多家 ISP 的扫描,每家都具备自己的垃圾邮件筛选器。垃圾邮件筛选器并不完美:即使您的电子邮件是合法的,ISP 的垃圾邮件筛选器也可能依然将它误判为垃圾邮件并予以拦截。

在决定是否递送电子邮件时,ISP 考虑的一个因素是电子邮件的来源。如果某个 IP 地址或域有发送垃圾邮件的历史记录,ISP 可能会拦截从中发出的电子邮件。

Amazon SES 采取主动的措施来防止发送可疑的内容,因此 ISP 可以始终如一地收到高质量电子邮件,因而能将该服务视为受信任的电子邮件来源。这可以最大程度提高我们所有发件人的送达率和可信赖度。下列是部分已采取的保护措施:

  • ISP 通常将电子邮件数量激增解读为垃圾邮件活动的征兆,可能会通过拦截此类电子邮件作出响应。为了帮助您避免这种缺陷,Amazon SES 自动“逐步增加”您可以从该服务发送的电子邮件数量,直到您达到目标数量。(有关更多信息,请参阅“详细说明”部分)。
  • Amazon SES 使用内容筛选技术,在邮件发送之前,协助检测和拦截包含垃圾邮件或恶意软件的邮件。
  • Amazon SES 拥有来自主要 ISP 的投诉反馈循环。投诉反馈循环指明收件人将哪些电子邮件标记为垃圾邮件。Amazon SES 可让您访问这些送达指标(针对您的电子邮件营销活动),以帮助引导您的发送战略。

除了 Amazon SES 采取的举措外,您还可以将发件配置为使用 Easy DKIM,让 Amazon SES 代表您为电子邮件进行 DKIM 签名。这一行业标准方式为大多数 ISP 所接受,可让您的电子邮件声誉与域的声誉齐名。

如何通过SES发送邮件

这里大概描述下Amaazon SES的使用步骤,至于每个步骤的详细操作去看操作手册

步骤图示如下:

Amaazon SES的使用步骤

如上图,一个框表示使用Amazon SES的一个操作步骤,而背景颜色为黑色的框表示,在使用Amazon SES的过程中,这个步骤可以加上,也可以去掉。 框下面的红色单词简单的描述每个步骤里涉及到操作和处理。下面将简单下每个步骤的处理过程。

第一、二步的内容在此省略,因为只要是简单的使用过Amazon AWS服务的朋友,这两步的处理应该都很清楚,这里就不再废话了。

Verify your email

验证你的email, 其实就是在你使用Amazon SES前,必须指定一个email账户或域名,当你使用Amazon SES发送邮件时,邮件的from使用的就是这个账户。但是,Amazon SES为了防止你随便指定一个账户,然后使用这个账户发垃圾邮件等,它需要对你提供的邮件账户或邮件域名进行验证,从而让你证明这个账户确实是你的,你确 实拥有这个域名。

验证email可以通过验证email地址或验证你使用的email地址的域名两种方式(如,对于163邮箱,验证163.com)。其中验证email 地址比较简单,只需要在Amazon 控制台上输入你需要验证的email地址,然后Amazon SES会发一封包含有验证链接的邮件到这个email邮箱,你进入邮箱,点击该链接,就验证完成了。至于验证域名,这个麻烦点,需要让你的DNS域名注册 商来对DNS进行相关的设置,由于篇幅较长,如果感兴趣,可以参照官方手册。

Authentication Your Email

Amazon SES是通过SMTP协议来发送邮件的,但是SMTP本身是不提供任何证明的。这就很可能会出现这样一种情况,有些怀有不良企图的人可能会通过修改 email头信息、IP地址等来冒充成你的邮箱来发送邮件,例如有人伪装成你的邮箱给你的好友发送邮件,从而套取一些信息等。为了防止邮件的伪造,验证邮件的合法性,业界就制定了一系列的标准,而SPF和SIDF就是这一系列标准中的一种,SPF,全称Sender Policy Framework,它大致的工作原理是这样的: 在你域名的DNS里添加一条SPF记录,该记录标识了经过授权的电子邮件发送服务器(即你发送邮件的服务器),当收件人邮箱服务器收到邮件后,会去发件人 的DNS服务器上查询SPF记录,验证邮件是否是从指定的邮件发送服务器发出,如果通过验证发现当前邮件不合法,则该邮件将不会发送到收件人信箱里。详细过程参考《[邮件防伪] 如何配置电子邮件服务器的 SPF Record》,引述如下:

如何配置电子邮件服务器的 SPF Record

什么是 SPF Record?在垃圾邮件的伎俩中,伪造发件人地址,使其看起来象一个合法的地址,是常见的一种方法。特别是网络钓鱼的邮件,试图欺骗收件人透露信用卡号码、QQ密码、Paypal 密码等帐号资料。这些邮件的“发件人”的地址,一般都经过了伪装,使其看起来看一个合法的(如银行、网站服务商等)地址。

SPF,正是近年来解决邮件防伪anti-spam 的一个新标准。SPF 全称为 Sender Policy Framework,即发送方策略框架。你只需要在你的域名 DNS 中发布一条 SPF 记录,这条记录标识了经过授权的电子邮件发送服务器。电子邮件接收系统,会查询对应域名的 SPF 记录,检查邮件是否来自真正的授权过的邮件发送服务器。如果是垃圾邮件、钓鱼邮件伪造的”发件人”地址,则他们的邮件会无法通过 SPF 校验。

目前,几大电子邮件服务商(如 MSN Hotmail/AOL/GMail)以及 120 多万个域名已经通过发布 SPF 记录和完成发件人 ID 检查。如果你是网站站长,那么建议你尽早实施 SPF 策略。特别是商业用户。我在前面几篇文章中谈到了电子邮件营销的话题,如果你的邮件服务器没有配置 SPF 策略,那么你发送的邮件列表,很有可能会被 Gmail/Hotmail 列为垃圾邮件。尽早实施,可以提高你邮件发送命中率,更好的垃圾邮件检测,得到增加的发件人声誉评分功能,以及可减少由于误报而导致的邮件发件人的抱怨。

SPF 是如何工作的?下面这张图来自 《Microsoft 关于 SDF 的配置页面》。比较清楚的讲明了 SPF 的工作机制:

SPF 的工作机制

  1. Sender sends an e-mail to Receiver.
  2. Receiver’s inbound e-mail server receives e-mail and calls its Sender ID Framework.
  3. The Sender ID Framework looks up the SPF record of the domain that Sender is using for sending the mail.
  4. The receiving Mail Transfer Agent (MTA) determines if the outbound Mail Server IP address matches IP addresses that are authorized to send mail for the user.

如何添加 SPF Record?添加 SPF Record 其实很简单,只需要在你域名的 DNS 管理界面中,加入一条 TXT 记录即可。TXT 记录的内容,可以通过下列工具的向导生成:

OpenSPF.org 提供的向导:http://old.openspf.org/wizard

Microsoft 提供的向导:http://www.microsoft.com/mscorp/safety/content/technologies/senderid/wizard/

使用了 Google Apps 的邮件服务的域名,如何配置 SPF 记录

如果你的域名,使用了Google Apps的邮件服务,根据 Google Apps Admin 的帮助文档设置 SPF 记录,你只需要在你的 DNS 控制中心,添加以下 TXT 记录:

v=spf1 include:aspmx.googlemail.com ~all

DKIM也是邮件验证的一个标准,DKIM全称 DomainKeys Identified Mail,中文一般称为域名密钥识别邮件标准。DKIM的工作过程和SPF相似,只是它对发件箱的域名进行了加密,且对发送的email message也就行了加密,如此一来,它不仅能其他人伪造他人邮箱发送信息,而且能够防止邮件在传输的过程中被篡改,目前DKIM是非常流行的一种标准。

Send an email message

让我们先看看 Amazon SES 发送邮件的整个工作流程图.

Amazon SES 发送邮件的整个工作流程图

从上图,我们可以总结出Amazon SES 发送邮件的过程由以下几个步骤组成的:
1.  客户端应用,或者说是发送端向Amazon SES发出请求,请求发送邮件给一个或多个接收者(收件人);
2.  Amazon SES会接收发送端的请求和数据,且验证请求的有效性,如果请求有效,则封装请求数据,存入到待发送队列里,否则向发送端发出请求无效的警告;
3. Amazon SES会遍历队列,将队列中的邮件传送到各收件人的ISP,ISP也会做一些列的验证,如果验证通过,会将你的邮件发送到收件人的邮箱里. 如果不通过,则退货邮件到Amazon SES, SES再退回到发送端.
4 . 如果收件人地址不存在,ISP会发送一个退回通知给Amazon SES, Amazon SES将会将这个退回通知发送给发送端
5.  如果 收件人不想要接收你所发的信息,可能会向ISP投诉,将你的邮件注册成一个骚扰邮件,ISP将会通知Amazon SES,Amazon SES将会通知发送端。

使用Amazon 发送邮件时需注意的一些问题

客户端请求:如果通过Amazon SES发送邮件,首先需要向SES发送一个请求.  发送请求的方式主要有两种: 一种是通过Amazon SES提供的API,或者通过http调用。

邮件内容过滤:发送电子邮件,垃圾邮件是我们必须要考虑的一个问题,你发送的邮件是电子邮件吗? ISP怎么识别电子邮件? 如果你不考虑这些问题,一旦ISP认为你发送的邮件是垃圾邮件,将冻结你所发的邮件,这样的邮件如果发送过多,ISP甚至会将你的发送端地址拉入黑名单, 禁止你向任何用户发送邮件。为了避免出现这种情况,在你通过Amazon SES发送邮件前,Amaonz SES会对你的邮件进行扫描,如果扫描出你的邮件里包含某些ISP可能会认为是垃圾邮件的信息,Amazon SES将会拒绝发送这封邮件,且会通过email,向你发送警告信息。

邮件发送数量的限制:每个申请Amazon SES服务的账号都有一个发送限制数, 它限制了你每天发送邮件的最大数量,刚申请服务时,发送限制数是2000。Amazon 官网上对于为什么要有这个限制的解释是,避免用户在不知情或误操作的情况下,发送了大量的 ISP不信任的邮件(垃圾邮件),如果数量过大,导致ISP突然直接冻结用户的账号。所以,Amazon SES会根据用户所发邮件的质量以及ISP对用户的信任度,会慢慢的曾大用户的发送限制数。

邮件退回:当你发送邮件时,指定收件人信箱时,可能一时大意打写错了,或者收件人信箱压根就不正确,或者收件人早已经注销了他的这个账户等,这样ISP 由于找不到邮箱地址,会退回你的发送邮件。 有一点需要注意,如果你发出的邮件很多都被退回,Amazon SES将会降低你的发送限制数。所以,为了避免发送限制数的减低,你需要时刻关注Amazon SES给你发的警告信息,及时将这些无效的邮箱地址从收件人地址列表中删除。

投诉:我们都知道,大部分邮件客户端都会提供一些功能按钮,如将邮件标志为垃圾邮件,或将邮件直接移到垃圾箱,并向ISP反馈这是垃圾邮件等。如果你的收件人收 到你的邮件,且进行上述操作,ISP将会发送投诉到Amazon SES,而Amazon SES 将会将投诉转发给你。这里也需要注意,确保哪些人想接收你的邮件,如果你发出的邮件大部分被评为垃圾邮件,你的发送限制数将会减低,情况严重甚至会终止你 的账户。

 Managing Your Sending Activity
正如上面所述,你出的邮件有可能会被退回,或遭到投诉, 而邮件的退回和投诉和你每日发送邮件的最大限制数是有密切关系,为了防止Amazon SES减低你的发送限制数,你需要及时的处理Amazon SES发给你的警告信息,如及时将那些收件人地址不存在、或不想接收你邮件的收件人从收件地址列表里清除出去。

参考资料:

Amazon的SDK文档:http://docs.aws.amazon.com/ses/latest/DeveloperGuide/Welcome

有PHP版的,然后调用他的SDK,填入你申请的账号和密码,即可以通过亚马逊的SMTP网关来发送邮件。

案例说明:http://docs.aws.amazon.com/ses/latest/DeveloperGuide/send-email-smtp-app