LoginSignup
49
46

More than 5 years have passed since last update.

S3+lambda+SESで問い合わせフォームの作成

Last updated at Posted at 2015-10-26

業務で製品の問い合わせフォームを作る機会があったので、まるまるAWSの機能を使ってみようかと。。

下記を参考にさせて頂きましたが、nodemailerの使い方がよく分かっていないので、メール部分はSESを使ってみました。SES以外の設定方法はこちらで

S3 + Lambda + Cognitoを使って、簡単お問い合わせシステム構築
http://qiita.com/takuma_yoshida/items/3bd3af8b09307d25981a

1.SESの設定

1-1 メールアドレスを登録
まずは使うメールアドレスを登録。「Email Addresses」の「Verify a New Email Address」からメールアドレスを登録。設定すると登録確認用のメールが飛んでくるので、メール本文にあるURLをクリックして本登録する。登録がされるとStatusがverifiedになります。
s3image1.png

2.IAMの設定

2-1 IAMでSESを使わせるユーザの作成
IAMで「ユーザーごとにアクセスキーを生成」にチェックが入った状態でユーザを作成。
s3image2.png

2-2.認証情報のダウンロード
作成したら認証情報のダウンロードでアクセスキーとシークレットをダウンロードしておく。
s3image4.png

2-3.ポリシーのアタッチ
作成したユーザのアクセス許可⇒ポリシーのアタッチから「AmazonSESFullAccess」を選択する。一瞬フルアクセスで良いのかと思いましたが、これしか選択できなかったので取り合えずコレで。
s3image4.png

3.Lambda Functionの修正

accessKeyIdとsecretAccesskeyにはダウンロードしたファイル内に書いてあるキーを設定

index.js
console.log("Loading event")
var aws = require('aws-sdk');
var s3 = new aws.S3({apiVersion: '2006-03-01'});
var ses = new aws.SES({apiVersion: '2010-12-01',
                        accessKeyId: 'xxxxxxxxxxxx',
                        secretAccesskey: 'xxxxxxxxxxxx',
                        region: 'us-east-1' });
exports.handler = function(event, context) {
    console.log('Received event:', JSON.stringify(event, null, 2));
    var bucket = event.Records[0].s3.bucket.name;
    var key = event.Records[0].s3.object.key;
    s3.getObject({Bucket: bucket, Key: key},
        function(err, data) {
            if (err){
                context.done('error', 'error getting file' + err);
            } else {
                console.log('data:' + data);
                var message = JSON.parse(data.Body);
                console.log('message:' + message);
                var eParams = {
                        Destination: {
                            ToAddresses: ["xxx@xxxx"]
                        },
                        Message: {
                            Body: {
                                Text: {
                                    Data: "mail:" + message.mail+ "\n" + "subject:"+message.title + "contents:"+message.contents
                                }
                            },
                            Subject: {
                                Data: "ホームページから問い合わせがありました。"
                            }
                        },
                        Source: "xxx@xxxx"
                        };

                        console.log('===SENDING EMAIL===');
                        var email = ses.sendEmail(eParams, function(err, data){
                            if(err){
                                console.log("===EMAIL ERR===");
                                console.log(err);
                                context.done(null, 'ERR'); 
                            }else {
                                console.log("===EMAIL SENT===");
                                console.log(data);
                                context.done(null, 'SUCCESS');
                            }
                });
                console.log("EMAIL CODE END");
            }
        }
    );

};

49
46
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
49
46