+86 135 410 16684Mon. - Fri. 10:00-22:00

AWS SES and WorkMail服务指南

AWS SES and WorkMail服务指南

AWS SES and WorkMail服务指南

AWS最近推出了WorkMail服务,用来代替公司内部自己搭建的Exchange邮件服务。WorkMail接管了exchange server那部分功能,可以使用自己的域名,也可以与自己的域打通。收费情况是按用户,每月每个用户的费用为 4 USD,其中包括每个用户 50 GB 的存储容量。WorkMail是可收发邮件的邮件服务。
而之前的SES(Simple Email Service)是只能发出去邮件的服务,不能用于接收,比较适合单向发送。
用于员工桌面的电邮服务这次不提,先说说运维中的项目邮件需求。
项目中一般会遇到需要发送电子邮件的功能,也有的用户需要收发功能,但是以单向发送为主。因此非常适合将SES和WorkMail结合配合使用。
具体做法:用WorkMail创建域名邮箱,并添加需要收发功能的账户,并用其中的一个账户去验证SES,使其变成SES合法发送的电子邮箱账户,然后用SES去发送单向的推广邮件和密码找回之类的邮件。
SES是按千封数量来收费,而WorkMail是按包月来收费,这就造成发单向邮件时,有时候用SES便宜,有时候用WorkMail便宜:
当使用SES发送邮件量不是非常大的时候,SES费用低于WorkMail单用户的包月费用,这时候就使用SES来发送推广邮件和密码找回类似的邮件;但是如果你使用SES发送邮件的费用超过了WorkMail包月的费用,那切换成WorkMail也很方便。

关于定价:
WorkMail:每月每个用户的费用为 4 USD,其中包括每个用户 50 GB 的存储容量。
SES: 官方说法如下:

如果您是 Amazon EC2 用户,您可以免费试用 Amazon SES。当您从 Amazon EC2 实例直接或通过 AWS Elastic Beanstalk 调用 Amazon SES 时,您可以每天免费发送 2,000 封电子邮件。许多应用程序能在此免费套餐限制内完整运行,并且 1 年后不会过期。

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

使用SES发邮件

How to use SES, and Using SMTP to Send Email with Amazon SES
(1) 使用SES(Simple Email Service)发邮件的时候,我们需要添加一个发件者邮箱(verify email sender),SES使用这个发件者邮箱作为发件者,添加完认证发信者之后,需要登录发信者邮箱点击确认连接。
SNS(简单消息服务)还有个类似的功能,叫topic,类似邮件组,将多个verified receivers添加到一个topic,然后在CloudWatch或者其他的服务调用,来发群邮件。这次先不讨论SNS。
可以使用下面这小段代码来添加verified sender

import boto.ses
conn = boto.ses.connect_to_region('us-east-1')
conn.verify_email_address('sender@address.com')

对了,截止我写这些时,SES只支持三个地区,Virginia,Ireland,Oregon(分别对应us-east-1, eu-west-1, us-west-2)
(2) 接来下我们收集SMTP credential相关信息
在SMTP Settings里面我们可以看到SMTP相关信息,例如Virginia地区的:

Server Name:                          email-smtp.us-east-1.amazonaws.com
Port:                                 25, 465 or 587
Use Transport Layer Security (TLS):   Yes
Authentication:                       Your SMTP credentials - see below.

然后在下面创建SMTP credential点击创建,他就自动创建了一个IAM角色并授权,并产生一组了类似AccessKey的信息,不过名字变成Username和password,形如:

IAM User Name,Smtp Username,Smtp Password
"ses-smtp-user.xxxx",AKIxxx,Aqbxxxxxxxxxxxxxxxxxx

(3) 这样使用SMTP发邮件的信息收集全了。可使用ConfigObj来加载配置文件中的Credential,并用smtplib来创建发邮件的对象

import smtplib
from configobj import ConfigObj

cfg = ConfigObj(config_path)
cfg_dict = cfg.dict()
host = cfg_dict["server"]
from_addr = cfg_dict["from_addr"]
username = cfg_dict["username"]
password = cfg_dict["password"]

server = smtplib.SMTP(host)
server.starttls()
server.login(username, password)
server.sendmail(from_addr, receivers, BODY)
server.quit()

配置文件形如:

server = email-smtp.us-east-1.amazonaws.com
from_addr = sender@domain.com
username = AKIxxx
password = Aqbxxxxxxxxxxxxxxxxxx