流れ
- ドメイン設定
- SESでドメインメール設定
- SES制限解除
- Lambda作成
ドメイン設定
簡単に説明します。
お名前.comでドメインを購入し、Route53のNSを4つコピーし、お名前.comのネームサーバー設定に貼り付けると設定完了です。
SESでドメインメール設定
ドメインメール設定をします。
DKIM用に、Route53に3つのCNAMEレコードが作成されます。
Identity status
とDKIM configuration
が数分でVerified
とSuccessful
になります。
SES制限解除
Account dashboard
に遷移すると、sandoboxの制限と記載されております。
今のままですと、SESに登録したメールアドレスにしか、メールが送れません。
SESの送信上限緩和およびSandbox制限の解除の申請を行います。
申請方法は、Service Quotas
とAWSサポート
2つあります。
①SESのコンソールとService Quotasから申請
sandbox制限解除
Account dashboard
に遷移し、Request production access
をクリックします。
- Mail Type
- Transactional トランザクションメールを送信する場合
- Marketing マーケティングメールを送信する場合
- Website URL
- 対象のウェブサイトの URL
- http または https から始まるURL形式のみ入力可能
- ウェブサイトが存在しない場合、ダミーのURL(http://test.com等)を入力し、「Use case description」にダミーのURLである旨を記載してください
- Use case description
- 使用理由を記載します。
-
送信制限数の上限緩和も申請可能です。
同時に申請したい場合「Use case description」の欄に希望する制限値をご記入ください。- 入力例
送信クォータ :〇〇通/日
- 入力例
送信レート:〇〇通/秒
- 入力例
- Additional contacts
- 連絡先アドレスを入力します。最大 4 つまでカンマ区切りで入力可能
送信制限緩和
サービス名Service Quotas
に遷移し、左タブのAWSサービス
クリックし、SESを検索しクリックします。
Sending quota
をクリックします。
Sending quota
に遷移しますので、クォータの引き上げをリクエスト
をクリックします。
クォータ値
を入力し、リクエストします。
翌日には、リクエスト完了され、SESの送信上限緩和およびSandbox制限の解除されます。
②AWSサポートから申請
以下の記事通り行いましょう。
Sandbox制限と送信制限解除が同時にできます。
Sandbox制限の解除のみの場合、こちらでもできます。
制限解除できたところで、テストメールを送ってみます。
Scenario
はCustom
にして、自分のGmailのメールアドレス等に送ってみましょう。
Lambda作成
ロールは、基本的な Lambda アクセス権限で新しいロールを作成
を選択します。
作成されたポリシーに以下のSESのメール送信権限を付与しましょう。
{
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource": "*"
}
import json
import os
import boto3
SENDER = os.environ["SENDER"]
REGION = os.environ["REGION"]
mail_1 = os.environ["mail_1"]
mail_2 = os.environ["mail_2"]
TITLE = "テストです。"
BODY = "テスト本文になります\n"\
+ "このようにすると、改行できます\n"\
def send_email(sender, to, subject, body):
client = boto3.client('ses', region_name=REGION)
response = client.send_email(
Source=sender,
Destination={
'ToAddresses': [
to,
]
},
Message={
'Subject': {
'Data': subject,
},
'Body': {
'Text': {
'Data': body,
},
}
}
)
return response
def lambda_handler(event, context):
maliList = [mail_1, mail_2]
# TO対象者別々にメール送信する
for i in range(len(maliList)):
send_email_to = send_email(SENDER, maliList[i], TITLE, BODY)
print(maliList[i])
print("Send ResponseMetadata:" + json.dumps(send_email_to, ensure_ascii=False))
return {'send_email': 'success'}
2つのメールに送る場合、各メールアドレスをTOにして送信するように組みました。
受信者が他に誰に送ったか分かると、プライバシー上良くないためです。
CCやBCCを贈りたい場合、To
の下に以下のように挿入します。
Destination={
'ToAddresses': [
'string',
],
'CcAddresses': [
'string',
],
'BccAddresses': [
'string',
]
},
詳しくはboto3のドキュメントを参考にしてください。
実行すると、メールが送れていると分かります。
参考