フリーランス 技術調査ブログ

フリーランス/エンジニア Ruby Python Nodejs Vuejs React Dockerなどの調査技術調査の備忘録

AWS SESの設定とLambdaでメール送信①

はじめに

  • 前回からのメールサーバーの構築中の続き

px-wing.hatenablog.com

px-wing.hatenablog.com

送信元の確認

  • 送信元メールアドレス の検証を行う。「Verify a New Email Address」ボタンをクリックする。 f:id:PX-WING:20201027075931p:plain
  • 指定する送信元メールアドレスは受信可能なメールアドレスを指定する必要がある。「Verify This Email Address」ボタンをクリックする f:id:PX-WING:20201027080058p:plain
  • 「close」ボタンをクリックする f:id:PX-WING:20201027080633p:plain
  • 登録した送信メールアドレスに検証要求メールが送信される。承認するためリンクをクリックすると、認証すると、「検証に成功しました」というメッセージがブラウザに表示されます。 f:id:PX-WING:20201027080815p:plain

AmazonSESでEメールを受信する設定

  • 確認済みのドメインに代わってAmazonSESを使用してメッセージを受信する場合、Amazon SESを設定して、メッセージをAmazon S3バケットに配信したり、AWS Lambda関数を介してカスタムコードを呼び出したり、AmazonSNSに通知を公開したりできます。- - 受信したくないメッセージをドロップまたはバウンスするようにAmazonSESを設定することもできます。
  • 受信ルールを定義することにより、メールに何が起こるかを制御します。

f:id:PX-WING:20201027190439p:plain

  • アカウントの作成を行う。[アカウント名]@[ドメイン名]を入力して「Add Recipient」ボタンをクリックする f:id:PX-WING:20201027190936p:plain

  • 追加したアカウントのステータスが「Verifed」になっていることを確認したら画面右下にある「Next Step」ボタンをクリックする

f:id:PX-WING:20201027191158p:plain

  • Actionsで「Lamda」を選択する f:id:PX-WING:20201027214347p:plain

  • Lamdaの関数を作成する必要があることに気づきいったんLamdaで下記のロジックで送信できるか検証する。

import boto3
import json

SOURCE_MAIL = "<Fromのアドレスを指定する>"
TO_MAIL = "<Toのアドレスを指定する>"
REGION = "us-east-1"

def send_email(source, to, subject, body):

    client = boto3.client('ses', 
        aws_access_key_id = "アクセスキー", 
        aws_secret_access_key = "シークレットアクセスキー", 
        region_name = "us-east-1"
    )
    
    response = client.send_email(
        Source = SOURCE_MAIL,
        Destination = {
            'ToAddresses': [
                TO_MAIL,
            ]
        },
        Message = {
            'Subject': {
                'Data': 'テストメール',
                'Charset': 'UTF-8'
            },
            'Body': {
                'Text': {
                    'Data': 'テスト本文',
                    'Charset': 'UTF-8'
                }
            }
        }
    )

    
    return response

def lambda_handler(event, context):
    email = "error occured"
    message = json.dumps(event, indent = 4)
    r = send_email(SRC_MAIL, DST_MAIL, email, message)
    return r

検証結果

  • Lamdaからメールが送信できたが、なりすましメールと判定されてメールが受信された。今日はここまでにして明日調べる

f:id:PX-WING:20201029000555p:plain