4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

LambdaとSESによるドメインでのメール送信

Last updated at Posted at 2022-02-05

流れ

  1. ドメイン設定
  2. SESでドメインメール設定
  3. SES制限解除
  4. Lambda作成

ドメイン設定

簡単に説明します。
お名前.comでドメインを購入し、Route53のNSを4つコピーし、お名前.comのネームサーバー設定に貼り付けると設定完了です。

SESでドメインメール設定

ドメインメール設定をします。

スクリーンショット 2022-02-05 14.02.39.png

ドメインを入力し、他は、デフォルトのまま、作成します。
スクリーンショット 2022-02-05 14.03.53.png

DKIM用に、Route53に3つのCNAMEレコードが作成されます。
Identity statusDKIM configurationが数分でVerifiedSuccessfulになります。
スクリーンショット 2022-02-05 14.10.52.png
スクリーンショット 2022-02-05 14.10.57.png

SES制限解除

Account dashboardに遷移すると、sandoboxの制限と記載されております。
スクリーンショット 2022-02-05 15.06.40.png
今のままですと、SESに登録したメールアドレスにしか、メールが送れません。

SESの送信上限緩和およびSandbox制限の解除の申請を行います。

申請方法は、Service QuotasAWSサポート2つあります。

①SESのコンソールとService Quotasから申請

sandbox制限解除

Account dashboardに遷移し、Request production accessをクリックします。
スクリーンショット 2022-02-05 15.06.40.png

下記のように記載し、リクエストを送信をクリックします。
スクリーンショット 2022-05-10 13.28.27.png

  • 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 つまでカンマ区切りで入力可能

日本語訳
スクリーンショット 2022-05-10 13.29.53.png

送信制限緩和

サービス名Service Quotasに遷移し、左タブのAWSサービスクリックし、SESを検索しクリックします。
スクリーンショット 2022-05-10 13.54.47.png
Sending quotaをクリックします。
スクリーンショット 2022-05-10 13.56.45.png

Sending quotaに遷移しますので、クォータの引き上げをリクエストをクリックします。
スクリーンショット 2022-02-05 15.45.30.png

クォータ値を入力し、リクエストします。
翌日には、リクエスト完了され、SESの送信上限緩和およびSandbox制限の解除されます。
スクリーンショット 2022-02-05 15.45.19.png

②AWSサポートから申請

以下の記事通り行いましょう。
Sandbox制限と送信制限解除が同時にできます。

Sandbox制限の解除のみの場合、こちらでもできます。

制限解除できたところで、テストメールを送ってみます。

ScenarioCustomにして、自分のGmailのメールアドレス等に送ってみましょう。

成功し、メールを受信したことを確認しましょう。
スクリーンショット 2022-02-05 15.56.53.png

Lambda作成

ロールは、基本的な Lambda アクセス権限で新しいロールを作成を選択します。
作成されたポリシーに以下のSESのメール送信権限を付与しましょう。

{
    "Effect": "Allow",
    "Action": [
         "ses:SendEmail",
         "ses:SendRawEmail"
     ],
     "Resource": "*"
}
Lambda
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の下に以下のように挿入します。

Lambda

    Destination={
        'ToAddresses': [
            'string',
        ],
        'CcAddresses': [
            'string',
        ],
        'BccAddresses': [
            'string',
        ]
    },

詳しくはboto3のドキュメントを参考にしてください。

実行すると、メールが送れていると分かります。

参考

4
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?