AWSのサービスを使ってみる~LambdaとSESを使って自動でメール送信~

はじめに
AWSでメール送信ってどうやるの?っと疑問に思っている方はいらっしゃることでしょう。 AWSでメールを送信する場合"SES"と呼ばれるサービスがあります。 本記事では、SESのEメールアドレスの設定から、Lambdaを使ったメール送信方法を紹介しています。 あくまで個人の学習目的での利用に留まりますが、SESの始め方や、その他のサービスとの連携について紹介していきます。AWSを始めて日が浅い方やこれから学習したいという方に是非参考にして頂けたら幸いです。
SESを始める
まずAmazon SESの正式名称は、「Amazon Simple Email Service」です。何ができるかと言うと、AWSでメールを送受信できるようになります。例えばAWSのEC2でアプリケーションを作ってそのアプリケーションからメールを送る際などには、このSESを使ってメールを送信することができます。またスパムの対策なども出来るようなので、安全にメールの送受信ができるようになります。
料金体系
EC2のアプリケーションからメールを送信する場合、月に 62,000 通のメッセージが無料で送信できます。
EC2以外の、例えばYahooメールなどのメールで送る場合、1000件につき、0.10USDかかります。
今回は私が普段使っているYahooメールのアドレスを登録して使って送信します。
メールアドレスの登録
では、メールアドレスを登録してみます。
1.AWSにログインする。
2.上部のサービスより「SES」を検索し、サービス画面に入ります。
3.左から「Email Addresses」を押下します。
4「Varify a New Email Address」を押下します。
5.自分の使っているEメールアドレスを入れて認証します。
以下のようにポップアップが出ます。
6.お使いのメールソフトの受信箱にAWSからメールが届きますので、長いURLをクリックします。
7.AWSのSESのページを再度開き、「Email Addresses」を押下し、上部の更新マークを押します。
8.すると、ステータスが「verified」に変わるはずです。
これで設定は完了です。
テストメール送信
テストメールを送ってみます。
上部の「Send a Test Email」を押下します。
Email Formatはとりあえずデフォルトにしておきます。
TOのところには自分のEメールアドレスを入れます。
※デフォルトではSESはSandbox(検証環境)になっており、認証されたEメール宛てにしかメール送信できませんので、送信先を変えたい場合はそのEメールアドレスを認証する必要があります。この設定はもちろん変更することが可能ですが、今回は動作を確認してみるのが目的ですので、送信元(自分のEメールアドレス)、送信先(自分のEメールアドレス)でテストメールしてみます。
SubjectとBodyは任意に入れてください。
※ちなみにメールの本文はHTML形式で記述することも可能です。
自分のEメールアドレスにメールが届いたら、成功です。
Lambdaで送信
では、Lambdaを使って、メール送信してみます。 今回はS3でファイルがアップロードされたのをトリガーにして、 そのファイルの情報をメールするようにします。 S3にバケットは作成済みという前提で始めていきます。
Lambdaのコード
今回はNode.jsを使っています。
コード
1.var AWS = require('aws-sdk');
2.var ses = new AWS.SES({region: 'ap-northeast-1'});
3.exports.handler = (event, context, callback) => {
4. var Bucket = event.Records[0].s3.bucket.name;
5. var ObjKey = event.Records[0].s3.object.key;
6. var FilePath = Bucket + '/' + ObjKey;
7. var params = {
8. Destination: {
9. ToAddresses: [ '自分のメールアドレス' ]// 送信先
10. },
11. Message: {
12. Body: {
13. Text: {
14. Data: 'BucketName : ' + Bucket+' '+'ObjKey : ' + ObjKey,
15. Charset: 'utf-8'
16. }
17. },
18. Subject: {
19. Data: 'S3へのアップロード通知',
20. Charset: 'utf-8'
21. }
22. },
23. Source: ''自分のメールアドレス' // 送信元
29. };
30.ses.sendEmail(params, function (err, data){
31. if (err) {
32. console.log(err);
33. context.fail(err);
34. }else{
35. console.log(data);
36. context.succeed(data);
37. };
38. });
39.};
簡単に何をやっているか説明すると、
1~2でAWSのメール送信するためのクラスをインスタンス化しています。
3.この関数の中に処理を書いていきます。
4~6で、S3にファイルがアップロードされた際に連携されるイベント情報からバケット名とファイル名を
取得しています。※わかりやすいように「ファイル」と呼んでいますが、AWSでは「オブジェクト」と呼びます。
7~29でSESインスタンスの引数であるParamの内容を記述しています。
Destination(送信先)、Message(本文)、Source(送信元)を設定します。Json形式で書きます。
30でEメールを送信しています。
31以下はエラーをハンドリングしています。
トリガーの設定
S3にPUTされたのを引き金にLambdaを起動させるように設定しておきます。
ロールのアクセス権限の設定
最後にアクセス権限を少し変えてあげなければなりません。
lambdaの対象関数の「ロール名」をクリックして、「AmazonSESFullAccess」をアタッチさせます。
これでLambda関数のロールにSESのフルアクセス権が付与されます。
これが無いとSESのクラスを利用する際にアクセスを拒否されます。
これで準備完了です。
S3にアップロードしてみる
では、S3に任意のファイルをアップロードしてみましょう。
Lambdaが起動させて自分のEメールアドレスに対象のファイルのバケット名とオブジェクト名が送信されれば成功です。
最後に
いかがでしたでしょうか? SESでEメールアドレスを設定し、Lambdaを使ってメールを送信するところまで紹介しました。 今回は自分のEメールアドレスから自分のEメールアドレスに送信するのみになってしまいましたが、SESの使い方やLambdaを使ったサービスとの連携の仕方のイメージがついたのでは無いでしょうか?実際に自分でアプリケーションを作った際は是非色々と試してみてください。 以上です。