AWSを使って簡単にメール送信機能を作成しよう
メール送信機能って、自前で作るのめっちゃだるくない?
プロトコル、サーバー、セキュリティ、色々考えること多い,,,,,.
そこで、簡単に作れるAWSのやり方を書きます
使用するサービス
- apigateway
- lambda
- ses
手順
1. APIGatewayの設定
REST APIを選択
新しいAPIを選択し、任意のAPI名を入力し、APIを作成する
後ほど、設定しますが、一旦次へ行きます。
2. Lambdaの設定
次に、コードを記述します。
import { SESClient, SendEmailCommand } from "@aws-sdk/client-ses";
const ses = new SESClient({ region: "ap-northeast-1" });
export const handler = async(event) => {
const command = new SendEmailCommand({
Destination: {
ToAddresses: ["送信先のメールアドレス"],
},
Message: {
Body: {
Text: { Data: "Test" },
},
Subject: { Data: "Test Email" },
},
Source: "送信元のメールアドレス",
});
try {
let response = await ses.send(command);
response.statusCode = 200;
response.body = "OK";
return response;
}
catch (error) {
return error;
}
finally {
// finally.
}
};
これで実行テスト!!
とは行きません。メールアドレスの検証が必要です。
3. SESの設定
IDの作成をします。
ここでは、開発で使用するメールアドレスを登録してください。
ID作成完了したら、画面右上の新しい確認Eメールへをクリックします。
クリック後、登録したメールアドレスへ以下のようなメールが届いています。
リンクをクリックします。
おめでとうございますの画面が表示されればメールアドレスの検証に成功しました。
これで使用できます。
本番環境では、サンドボックスというものがあり、その設定が必要になります。
これで、lambdaを実行すると,,,
まだ送信できません。エラーになるはずです。
なぜなら、lambdaにはメールを送信する権限が付与されていないからです。
なので、権限を付与しましょう
4. lambdaに権限付与
IAMサービスを開きます。
ポリシーを選択します
ポリシーの作成をクリック
アクセス許可を指定で、JSONを選択し、以下のポリシーを追加してください
{
"Version": "2012-10-17",
"Statement": [
{
"Effect": "Allow",
"Action": [
"ses:SendEmail",
"ses:SendRawEmail"
],
"Resource": "*"
}
]
}
確認して作成します。
次に作成したポリシーをロールに付与します。
ロールを作成してください 入力は任意の文字。
lambdaの設定=>アクセス権限=>編集で今作成したロールにします。
これで、lambdaのテストでメールが送信されるようになります。
最後にAPIGatewayを開いて、エンドポイントを作成したラムダに設定して、テストを実行してみましょう
完了できました。
セキュリティを意識した設定
これでは、デプロイ後にapiのリンクを叩けば、無限にメールを送信できるようになってしまいます。
apigatewayには、IP制限や鍵の設定ができるのでそれを設定してください。
また、apigatewayのリンクをむき出しにするのもよくないので、別のapiを用意して経由する形で扱うのがいいでしょう。
### 最後に
めっちゃ簡単にメール送信機能の作成ができました。
aws様様ですね。