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

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

AWS SESで受信したメールをS3に保存する

はじめに

SESで受信したメールをS3に保存する設定

  • 「Email Receiving」→「Rule Sets」→ 「既存ルールの変更」または「新規ルールの作成」→「Actions」の設定画面に遷移する
  • 「Add action」から「S3」を選択する f:id:PX-WING:20201029142150p:plain
  • メールを保存するためのS3バケットを作成する f:id:PX-WING:20201029142453p:plain
  • S3上に作成するバケット名を設定してボタンをクリックする f:id:PX-WING:20201029142836p:plain
  • 「Save Rule」ボタンをクリックする f:id:PX-WING:20201029143512p:plain

S3のバッケトの確認

  • 上記で作成したS3のバケットのポリシーがSES からの E メールを保存するためにアクセス許可を持っているか確認する f:id:PX-WING:20201029161044p:plain

メール送信してみる

  • 下記のようなエラーが発生する。原因はLambdaからS3にアクセスする権限がないためにエラーになっていた。
[ERROR] ClientError: An error occurred (AccessDenied) when calling the SendRawEmail operation: User `arn:aws:sts::756866072545:assumed-role/email_forwarding-role-j5b3a8ac/email_forwarding' is not authorized to perform `ses:SendRawEmail' on resource `arn:aws:ses:us-east-1:756866072545:identity/winlogic.biz'
Traceback (most recent call last):
  File "/var/task/lambda_function.py", line 49, in lambda_handler
    send_email(raw_message)
  File "/var/task/lambda_function.py", line 25, in send_email
    response = ses_client.send_raw_email(
  File "/var/runtime/botocore/client.py", line 316, in _api_call
    return self._make_api_call(operation_name, kwargs)
  File "/var/runtime/botocore/client.py", line 635, in _make_api_call
    raise error_class(parsed_response, operation_name)
  • Lambdaのアクセス権限にS3にFullAccessを与える f:id:PX-WING:20201029175448p:plain

結果

  • LambdaにS3のアクセス権限を与えたことでLambdaからS3へのアクセスをすることができて、S3上にもメールが保存されていることを確認できた。 f:id:PX-WING:20201030075018p:plain