【AWS】いまさら空メール【SES】

【AWS】いまさら空メール【SES】:


やりたいこと

空メール自動受付システム的なものを作る。




Lambdaで便利な関数を作ったは良いが、それを任意のタイミングで起動したい時どうすべか?かと考えた挙句、

古から伝わる”空メール”という技法を使うことにした。
cloudcraft.png



作り方

概要は・・・

1. DNS設定:メールがSESに到着するようにする

2. SES設定:受信したメールをLambdaに流し入れる

3. Lambda:受け取ってから何かする


受信メールを受け付ける設定

このあたりを参考に。

私が持っているドメインは、MXレコードがGoogleに向いているのでサブドメインを作ることにする。

↓翻訳

現在、私がRoute53で管理しているドメイン�� hoge.com

hoge.comのMXレコードは、Google提供のものを設定している

変な設定をして、メールが受け取れなくなると困るので、サブドメインで受けることにする

Route53でレコードを1つ追加する

aws.hoge.com MX [SESで指定されたもの]

これで、ore@aws.hoge.com みたいなメールアドレスで受信できる


受信したメールをさばく

上図のように、東京リージョンにはSESがないので、オレゴンあたりで受けます。

リージョン違いでうまくいかなかった。下記テスト結果

❌オレゴンSES→東京Lambda

❌オレゴンSES→東京SNS

⭕️オレゴンSES→オレゴンSES→東京Lambda
これでLambdaにメールが届きます。

SNSで到着するので、形式はJSONです!
Amazon SES の Amazon SNS 通知のコンテンツ ��これのMailオブジェクトです。


Lambda

  1. SNSを受け取って起動
  2. 送信者が知っている人か?を判定
  3. 宛先のアドレスによって、処理方法を分岐
    という感じです。
SES→SNSで発火するもの
exports.handler = function(event, context) { 
    var eventSns = event.Records[0].Sns; 
    var msg = eventSns.Message; 
    var msgObj = JSON.parse(msg); 
    var flg = false; 
 
    //送信者は知っている人かチェックする 
    switch(msgObj.mail.source){ 
        case 'omae@sitteru.com' : 
        case 'you@sitteru.com': 
            flg = true; 
            break; 
        default: 
            console.log("知らない人からメールが来ますた"); 
            console.log(msgObj.mail); 
            //ログに書いて終わり 
    } 
 
    if(flg) { 
        //from判定OKの場合のみ 
        //宛先アドレスによる処理分岐 
        switch(msgObj.mail.destination + ''){ 
            case 'ore@aws.hoge.com': 
                //請求情報通知 
                var aws = require('aws-sdk'); 
                var lambda = new aws.Lambda(); 
                var lmdParam = { 
                    FunctionName: "★他のLambda関数★", 
                    InvocationType: "Event", 
                    Payload: JSON.stringify(event), 
                 }; 
                 lambda.invoke(lmdParam, function(err, data) { 
                      if(err) { 
                       console.log(err + err.stack); 
                      } else { 
                       console.log(data); 
                      } 
                  }); 
 
                break; 
            default: 
                //Slackに送るとか             
        } 
    }   
}; 


まとめ

billing @aws.hoge.comに空メールを送ると、AWS請求料金が帰ってくる仕組みを作った。

アカウント部分を増やせば色々できそう。。

メール内容がJSONで受ける事ができるので、メール内容をDB登録とかもできますな。

コメント

このブログの人気の投稿

投稿時間:2021-06-17 05:05:34 RSSフィード2021-06-17 05:00 分まとめ(1274件)

投稿時間:2021-06-20 02:06:12 RSSフィード2021-06-20 02:00 分まとめ(3871件)

投稿時間:2020-12-01 09:41:49 RSSフィード2020-12-01 09:00 分まとめ(69件)