Amazon SES(Simple Email Service)でメール受信時のアクションでLambdaを実行して渡されるデータを見てみる
Amazon SESで受信したメールをS3に保存して、S3のトリガーでLambdaを実行して転送処理を書くのがよくあるケースのようですが、受信ルールのアクションでもLambdaを実行出来るので、その場合どのようなデータがLambdaに渡されているのかを見てみました。
あわよくば、S3からではなく、SESから渡されたデータをもとに転送出来たら処理がシンプルかなと思いまして。
目次
テスト用のLambda関数を作成
ランタイムはPython3.6です。
テスト用なのでeventの内容をログに出すだけです。
SESと同じリージョンにLambda関数を作成する必要があります。
|
1 2 3 4 5 6 7 8 9 10 |
import logging logger = logging.getLogger() logger.setLevel(20) def lambda_handler(event, context): logger.info(event) return |
SESの受信ルール設定
SESにドメインは登録されている前提で進めます。
新しいルールを作成します。
今回はRecipientsは設定せずに進めてみます。
ルールをドメインやアカウントに限定する場合は設定するべきです。
ActionでLambda Functionを選択します。
Rule Detailsはデフォルトのままにしました。
確認画面です。
作成します。
テストメールを送信してみる
SESに登録済のドメインの適当なアカウント宛にGmailからメールを送信してLambdaのログを確認してみました。
このようなデータが渡っていました。
|
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 |
{ 'Records': [ { 'eventSource': 'aws:ses', 'eventVersion': '1.0', 'ses': { 'mail': { 'timestamp': '2018-01-08T01:49:28.137Z', 'source': 'source@gmail.com', 'messageId': 'lelpuk070j3q3ifuhhjut2mjhpnj6ruhhk0p7b81', 'destination': [ 'user1@destination.com' ], 'headersTruncated': False, 'headers': [ { 'name': 'Return-Path', 'value': '<source@gmail.com>' }, { 'name': 'Received', 'value': '**********' }, { 'name': 'X-SES-Spam-Verdict', 'value': 'PASS' }, { 'name': 'X-SES-Virus-Verdict', 'value': 'PASS' }, { 'name': 'Received-SPF', 'value': '********' }, { 'name': 'Authentication-Results', 'value': '******' }, { 'name': 'X-SES-RECEIPT', 'value': '******' }, { 'name': 'X-SES-DKIM-SIGNATURE', 'value': '******' }, { 'name': 'Received', 'value': '******' }, { 'name': 'DKIM-Signature', 'value': '******' }, { 'name': 'X-Google-DKIM-Signature', 'value': '******' }, { 'name': 'X-Gm-Message-State', 'value': '*******' }, { 'name': 'X-Google-Smtp-Source', 'value': '******' }, { 'name': 'X-Received', 'value': '******' }, { 'name': 'MIME-Version', 'value': '1.0' }, { 'name': 'Received', 'value': '******' }, { 'name': 'From', 'value': 'テスト送信元 <source@gmail.com>' }, { 'name': 'Date', 'value': 'Mon, 8 Jan 2018 10:49:26 +0900' }, { 'name': 'Message-ID', 'value': '<CA+9tysfvhxuYO_-TGuJZNddh_ddqqLhkKOQ42B=7ZPQ32i4uLg@mail.gmail.com>' }, { 'name': 'Subject', 'value': 'SES送信テスト' }, { 'name': 'To', 'value': 'user1@destination.com' }, { 'name': 'Content-Type', 'value': 'text/plain; charset="UTF-8"' }, { 'name': 'Content-Transfer-Encoding', 'value': 'base64' } ], 'commonHeaders': { 'returnPath': 'source@gmail.com', 'from': [ '"テスト送信元" <source@gmail.com>' ], 'date': 'Mon, 8 Jan 2018 10:49:26 +0900', 'to': [ 'user1@destination.com' ], 'messageId': '<CA+9tysfvhxuYO_-TGuJZNddh_ddqqLhkKOQ42B=7ZPQ32i4uLg@mail.gmail.com>', 'subject': 'SES送信テスト' } }, 'receipt': { 'timestamp': '2018-01-08T01:49:28.137Z', 'processingTimeMillis': 451, 'recipients': [ 'user1@destination.com' ], 'spamVerdict': { 'status': 'PASS' }, 'virusVerdict': { 'status': 'PASS' }, 'spfVerdict': { 'status': 'PASS' }, 'dkimVerdict': { 'status': 'PASS' }, 'dmarcVerdict': { 'status': 'PASS' }, 'action': { 'type': 'Lambda', 'functionArn': 'arn:aws:lambda:us-east-1:*******:function:ses_forward', 'invocationType': 'Event' } } } } ] } |
本文以外の情報は渡っていそうです。
転送ではなく、メールの送信元によって処理をしたり、単純ではない処理をするときに使用するケースが考えられるのかなと思いました。
転送にはWorkMailを使用するかS3にデータを格納してそれを解析して転送するか、かなと思いますので、またそれは別途試してみたいと思います。
S3にIMAPプロトコルでアクセス、とか出来るようになると嬉しいなと思ったり。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
「AWS認定資格試験テキスト AWS認定AIプラクティショナー」という本を書きました。
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
「AWSではじめるLinux入門ガイド」という本を書きました。
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
関連記事
-
-
S3バケットポリシーで特定のVPCエンドポイント以外からのリクエストを拒否しつつメンテナンスはしたい
特定のVPCで実行されているEC2のアプリケーションからのリクエストだけを許可し …
-
-
AWS認定試験の自宅受験で壁のポスターを注意されちゃいました
AWS認定オンライン受験をしてみましたに書きましたとおり、自宅受験デビューしまし …
-
-
スポットインスタンスの削減額情報を見ました
なんだこれ?と思って、検索してみたら、2018年11月からあったのですね。 Am …
-
-
AWS WAF Web ACLとルールをv1(Classic)からv2に自動移行しました
新しいものは、課題が解決されていたり、機能追加されたりするのでいいものです。 長 …
-
-
Amazon CloudWatch クロスリージョンクロスアカウントダッシュボードを作成
本ブログのCloudFrontとWAFのアカウントと、EC2、RDS、S3などオ …
-
-
ブラウザからJavaScript SDKを使ってAmazon S3 への写真のアップロードチュートリアルをやってみました
ブラウザから Amazon S3 への写真のアップロードをやってみました。 HT …
-
-
DynamoDBテーブル項目をS3にエクスポート
DynamoDBテーブルを一時テーブルとして使っていて、毎回使い捨てしてます。 …
-
-
Amazon VPCでIPv6を使用する
VPCのIPv6を設定してみました。 設定 [Amazon 提供の IPv6 C …
-
-
EC2にSystems MangerからCloudWatchエージェントをインストール
CloudWatchエージェント EC2の標準メトリクスでは収集できないメモリの …
-
-
Amazon LinuxにRedmine をインストールする(手順整理版)
Amazon LinuxにRedmineをインストールしました手順を記載します。 …




