※メール送信機能を実装するにあたりアプリの環境は以下のとおりです。
フレームワーク:Spring Boot 3.0
プログラミング言語:Java 17
※詳しい料金形態はこちらを参照ください。
1. 検証済みのメールアドレス、または検証済みのドメインでしかメールの送受信ができない
2. 1日あたり200通しかメールを送信できない
3. 1秒あたり1メッセージしか送信できない
https://docs.aws.amazon.com/ja_jp/ses/latest/dg/request-production-access.html
1. AWSにログイン後、検索欄より「simple email service」を入力し、「Amazon Simple Email Service」をクリックします。
2. 左ナビゲーションメニューの「検証済みID」をクリックし、「IDの作成」ボタンをクリックします。
3. 「IDタイプ」で「Eメールアドレス」を選択し、Eメールアドレス入力欄に任意のアドレスを入力し、「IDの作成」ボタンをクリックします。
4. 先ほど入力したメールアドレス宛に以下のメールが届くのでリンクをクリックします。
5. リンククリック後に以下のページが表示されることを確認します。
6. 左ナビゲーションメニューの「検証済みID」をクリックします。一覧に登録したメールアドレスが表示され、IDステータスが「検証済み」になっていることを確認します。
1. 左ナビゲーションメニューの「検証済みID」をクリックします。一覧の「ID」列に表示されているメールアドレスをクリックします。
2. 「テストEメールの送信」をクリックします。
3. Eメール形式に「フォーマット済み」を選択し、シナリオに「カスタム」を選択します。カスタム受信者に前項で登録したメールアドレスを入力します。「件名」と「本文」に任意の値を入力して「テストEメールの送信」をクリックします。
4. 前項で登録したメールアドレス宛へメールが届いていることを確認します。併せて件名と本文が上記で設定した内容と一致していることも確認します。受信トレイにメールが見当たらない場合は迷惑メールを確認してください。
実装するにあたりアプリの環境は以下のとおりです。
フレームワーク:Spring Boot 3.0
使用言語:Java 17
ビルドツール:Maven
1. pom.xmlのdependenciesに以下を追加します。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-aws</artifactId>
<version>2.2.6.RELEASE</version>
</dependency>
<dependency>
<groupId>com.amazonaws</groupId>
<artifactId>aws-java-sdk-ses</artifactId>
<version>1.12.450</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-mail</artifactId>
</dependency>
2. src/main/java/{your project name}/configにAmazonSESConfig.javaを新規作成し、以下の内容で保存します。
package com.example.springsecuritysample.config;
import org.springframework.cloud.aws.mail.simplemail.SimpleEmailServiceMailSender;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.mail.MailSender;
import com.amazonaws.auth.AWSStaticCredentialsProvider;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.regions.Regions;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailService;
import com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClientBuilder;
@Configuration
public class AmazonSESConfig {
@Bean
public AmazonSimpleEmailService amazonSimpleEmailService() {
// AWSの認証情報とリージョンを設定
// accessKeyとsecretKeyはIAM→アクセス管理→ユーザ→セキュリティ認証情報→アクセスキーで表示されるものを使用する
return AmazonSimpleEmailServiceClientBuilder.standard()
.withCredentials(new AWSStaticCredentialsProvider(new BasicAWSCredentials("accessKey","secretKey")))
.withRegion(Regions.AP_NORTHEAST_1).build();
}
@Bean
public MailSender mailSender(AmazonSimpleEmailService ses) {
return new SimpleEmailServiceMailSender(ses);
}
}
※説明の簡略化のためaccessKeyとsecretKeyをハードコードしていますが、実際の運用にはapplication.ymlなどの外部ファイルに切り出すことが望ましいです。
3. src/main/java/{your project name}/serviceにMailService.javaを新規作成し、以下の内容で保存します。
package com.example.springsecuritysample.service;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.mail.MailSender;
import org.springframework.mail.SimpleMailMessage;
import org.springframework.stereotype.Service;
import jakarta.mail.internet.InternetAddress;
@Service
public class MailService {
@Autowired
MailSender sender;
// メールを送信するにはこちらのメソッドを実行する
public void sendMail() throws Exception {
// InternetAddressを使って「名前 <xxxx@gmail.com>」の形式に整形
// メールアドレスはAmazonSESのコンソール上で検証済みとなっているアドレスを使用する
// サンドボックスの制限を解除している場合は任意のメールアドレスを使用可能
InternetAddress senderAddress = new InternetAddress("hoge@hogehoge.com", "test", "ISO-2022-JP");
InternetAddress recieverAddress = new InternetAddress("hoge@hogehoge.com", "test", "ISO-2022-JP");
SimpleMailMessage mailMessage = new SimpleMailMessage();
// 送信先の設定
mailMessage.setTo(recieverAddress.toString());
// 送信元の設定
mailMessage.setFrom(senderAddress.toString());
// 返信先の設定
mailMessage.setReplyTo(senderAddress.toString());
// 件名の設定
mailMessage.setSubject("テスト件名");
// 本文の設定
mailMessage.setText("テスト本文");
// メール送信
sender.send(mailMessage);
}
}
4. メールを送信するにはMailService.javaのsendMail()を呼ぶことでメールを送信することができます。
以上で全ての手順は完了になります