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