概要
開発中のアプリにレポートを投稿した際にメール通知が必要ということでAWSのSESを利用した検証を行いました。
メール通知やメール配信を考えている方の少しでも参考になればと思います。
事前に
アプリケーション
Amplify SNS Wrokshopの「FOLLOW/TIMELINE機能の実装」までを実装済みの方を前提としています。
しかし、SESの実装自体は簡単ですので、Amplify SNS Wrokshopをやっていない方でも実装できると思います。
Email認証
SESの送信元は検証済みのEメールアドレスが必要となります。
検証済みのEメールアドレスがない方はこちらを参考に準備してください。
実装
権限設定
LambdaにSESの権限を与えるにはamplify/backend/function/createPostAndTimeline/createPostAndTimeline-cloudformation-template.json
を編集します。
lambdaexecutionpolicy>PolicyDocument>Statement>Actionにses:SendEmail
とses:SendRawEmail
を追加します。
"lambdaexecutionpolicy": {
"DependsOn": [
"LambdaExecutionRole"
],
"Type": "AWS::IAM::Policy",
"Properties": {
"PolicyName": "lambda-execution-policy",
"Roles": [
{
"Ref": "LambdaExecutionRole"
}
],
"PolicyDocument": {
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"logs:CreateLogGroup",
"logs:CreateLogStream",
"logs:PutLogEvents",
"ses:SendEmail", // Here!
"ses:SendRawEmail" // Here!
],
"Resource": {
"Fn::Sub": [
"arn:aws:logs:${region}:${account}:log-group:/aws/lambda/${lambda}:log-stream:*",
{
"region": {
"Ref": "AWS::Region"
},
"account": {
"Ref": "AWS::AccountId"
},
"lambda": {
"Ref": "LambdaFunction"
}
}
]
}
}
]
}
}
},
AWS SDKのインストール
AWS SDKをamplify/backend/function/createPostAndTimeline/src
にインストールします。
cd amplify/backend/function/createPostAndTimeline
npm install aws-sdk
送信処理
ここからamplify/backend/function/createPostAndTimeline/src/index.js
に送信処理を加えていきます。
まずは、AWS SDKを読み込みます。
const AWS = require("aws-sdk")
さらに、フォロー処理の下あたりに処理を加えます。
1.送信するEmailのparamsを設定
2.リージョンを設定
3.送信処理
exports.handler = async (event, context, callback) => {
・
・
・
const listFollowRelationshipsResultWithOwner = await graphqlClient.query({
query: gql(listFollowRelationships),
fetchPolicy: 'network-only',
variables: queryInput,
});
// 1.送信するEmailのparamsを設定
const params = {
Destination: {// 必須
CcAddresses: [
'EMAIL_ADDRESS',
],
ToAddresses: [
'EMAIL_ADDRESS',
]
},
Message: { // 必須
Body: { // 必須
Text: {
Charset: 'UTF-8',
Data: `投稿内容:${res.data.createPost.content}\n投稿日時:${new Date(res.data.createPost.timestamp)}`,
},
},
Subject: {
Charset: 'UTF-8',
Data: '投稿しました'
},
},
Source: 'SENDER_EMAIL_ADDRESS', // From・必須
}
// 2.リージョンを設定
AWS.config.update({ region: "ap-northeast-1" })
// 3.送信処理
const ses = new AWS.SES()
try {
await ses.sendEmail(params).promise()
console.log("Success to Send an Email")
return
} catch (e) {
console.log(`Failed to Send an Email: ${e}`)
return
}
return post;
};
送信結果
まとめ
今回はSESでメールの送信を実装しましたが、Lambdaに権限を追加すれば他のAWSのサービスも利用できそうです。
SESには、今回使っていない設定やテンプレートなどがあるようなので、カスタマイズしたい方はこちらを参考にしてみてください。
参考
使用した E メールの送信Amazon SES
Lambda と Amazon SES を使用して E メールを送信するにはどうすればよいですか?
- Miyata Koki - [O:inc.](https://o-inc.jp/)でAmplify×React×React Nativeを使用して開発しています。大学のゼミでは統計学をPythonで行っています。 インターンやゼミで学んだ情報を発信していくので、フォロバするのでぜひこちらのアカウントのフォローお願いします!