对企业来说,构建大规模的电子邮件解决方案通常是一个复杂且成本高昂的挑战。您必须解决电子邮件服务器管理、网络配置和 IP 地址信誉等基础设施难题。除此之外,许多第三方电子邮件解决方案还会要求与您签署合同,而且价格还需要协商,到了使用初期,您还需要支付大量的前期费用。
Amazon SES 就为您铺平了道路,因为 Amazon.com 在这方面已经积累了多年经验,并且为服务自身的庞大客户群构建了完善的电子邮件基础设施,而这些都能有利于您获益良多。
- 将电子邮件和域身份从一个 AWS 区域复制到另一个区域
- 生成凭证以连接到 SMTP 端点
- 验证电子邮件身份与发送消息
https://docs.aws.amazon.com/zh_cn/ses/latest/dg/service_code_examples_ses_scenarios.html
以下示例是使用 Python 语言向自己发送电子邮件,以便检查是否收到了该电子邮件。
Region:Singapore [ap-southeast-1]
先决条件:
- 使用 Amazon SES 验证电子邮件地址
- 获取 AWS 凭证,即 Amazon ESE SMTP 凭证
- 安装 Python 3.7 及以上版本
- 安装 AWS SDK for Python(Boto)
1)创建电子邮件地址 minxxx@xxxxoud.com
导航到 Amazon SES 控制台,在“配置”栏选择“已验证身份”,点击“创建身份”。身份类型选择“电子邮件地址”,输入要验证的电子邮件地址。
点击“创建身份”按钮。
2)验证电子邮件身份
登录邮箱,查看收件箱,会收到一封来自no-reply-aws@amazon.com的邮件。根据邮件内容操作验证,完成后,更新控制台,身份状态更新为“已验证”。
1)选择 Create SMTP Credentials(创建 SMTP 凭证) ,将打开 IAM 控制台。
2)对于为 SMTP 创建用户,请在 IAM User Name(IAM 用户名) 字段键入您的 SMTP 用户的名称,或使用提供的默认值。完成后,选择右下角的 Create(创建) 。
4)选择 Download Credentials(下载凭证) 或者复制凭证,并将其存储在安全的地方(关闭此对话框后,将无法查看或保存凭证)。
5)选择 Close Window(关闭窗口)。
6)在 IAM 用户找到名为 minxxxxxx23-1-10 的用户,在“安全凭证”栏,创建,下载并记录好 AKSK。
在“权限”栏,给用户自动附加了 AmazonSesSendingAccess 策略,可以根据需求修改策略。
可以参考“IAM 用户使用 SES 发送邮件的权限策略”,链接如下:
https://docs.aws.amazon.com/zh_cn/ses/latest/dg/control-user-access.html#iam-and-ses-examples-email-sending-actions
此处不做详细演示,具体可以参考文章“在Linux下安装python 3.7”
https://cloud.tencent.com/developer/article/1918543
此处不做详细演示,具体可以参考官网链接:https://boto3.amazonaws.com/v1/documentation/api/latest/guide/migrationpy3.html#guide-migration-py3
以下截图是成功安装boto3的输出:
将IAM用户(minxxxxx23-1-10)安全访问凭证的 AKSK 分别添加到 AK、SK,Region 替换为所在区域的 Region。
使用命令,根据提示输入AK 、SK 和 Region:
aws configure
import boto3from botocore.exceptions import ClientError# Replace sender@example.com with your "From" address.# This address must be verified with Amazon SES.SENDER = "Sender Name <sender@example.com>" # Replace recipient@example.com with a "To" address. If your account # is still in the sandbox, this address must be verified.RECIPIENT = "recipient@example.com" # Specify a configuration set. If you do not want to use a configuration# set, comment the following variable, and the # ConfigurationSetName=CONFIGURATION_SET argument below.CONFIGURATION_SET = "ConfigSet" # If necessary, replace us-west-2 with the AWS Region you're using for Amazon SES.AWS_REGION = "us-west-2" # The subject line for the email.SUBJECT = "Amazon SES Test (SDK for Python)" # The email body for recipients with non-HTML email clients.BODY_TEXT = ("Amazon SES Test (Python)rn" "This email was sent with Amazon SES using the " "AWS SDK for Python (Boto)." ) # The HTML body of the email.BODY_HTML = """<html><head></head><body> <h1>Amazon SES Test (SDK for Python)</h1> <p>This email was sent with <a href='https://aws.amazon.com/ses/'>Amazon SES</a> using the <a href='https://aws.amazon.com/sdk-for-python/'> AWS SDK for Python (Boto)</a>.</p></body></html> """ # The character encoding for the email.CHARSET = "UTF-8" # Create a new SES resource and specify a region.client = boto3.client('ses',region_name=AWS_REGION) # Try to send the email.try: #Provide the contents of the email. response = client.send_email( Destination={ 'ToAddresses': [ RECIPIENT, ], }, Message={ 'Body': { 'Html': { 'Charset': CHARSET, 'Data': BODY_HTML, }, 'Text': { 'Charset': CHARSET, 'Data': BODY_TEXT, }, }, 'Subject': { 'Charset': CHARSET, 'Data': SUBJECT, }, }, Source=SENDER, # If you are not using a configuration set, comment or delete the # following line ConfigurationSetName=CONFIGURATION_SET, )# Display an error if something goes wrong. except ClientError as e: print(e.response['Error']['Message'])else: print("Email sent! Message ID:"), print(response['MessageId'])
注释:
- sender@example.com:替换为您已使用 Amazon SES 验证过的电子邮件地址。Amazon SES 中的电子邮件地址区分大小写。请确保您输入的地址与经验证的地址完全相同。
- recipient@example.com:替换为收件人的地址。
- us-west-2:请将它替换为您要使用的区域。
- ConfigSet:请将它替换为您使用的配置集。
3)保存amazon-ses-sample.py,并在该文件所在目录运行程序,运行命令
python amazon-ses-sample.py
4)检查输出,如果已成功发送电子邮件,则控制台会显示“Email sent!”
5)登录邮箱可收到已发送的电子邮件
此处只演示了使用Python开发工具发送邮件,更多开发工具(.Net、JAVA、PHP、Ruby)使用,请参考链接:
https://docs.aws.amazon.com/zh_cn/ses/latest/dg/send-an-email-using-sdk-programmatically.html
基于示例1的基础上,将账号移出 Amazon SES 沙盒
当您的账户不在沙盒中时,您可以将电子邮件发送给任何收件人,而不管收件人的地址或域是否经过验证,同时须验证用作“发件人”、“源”、“发送者”或“退回路径”地址的所有身份。
具体有两种实现方法,请参考链接:
https://docs.aws.amazon.com/zh_cn/ses/latest/dg/request-production-access.html
当你提交申请后,控制台会跳出如下弹框提示
当审核通过,会在控制台首页看到已经分配了发送电子邮件的权限。获得50000的配额,最大的发送速率为每秒14封。具体会根据你的申请条件分配。