N-LAB

Amazon SESを利用してメールを配信する方法


目標

※メール送信機能を実装するにあたりアプリの環境は以下のとおりです。
フレームワーク:Spring Boot 3.0
プログラミング言語:Java 17

前提


注意点


目次

  1. Amazon SESとは
  2. Amazon SES サンドボックスとは
  3. Amazon SESで使用するメールアドレスの登録
  4. メールのテスト送信
  5. Amazon SESメールの送信機能の実装


1. Amazon SESとは



※詳しい料金形態はこちらを参照ください。

2. Amazon SES サンドボックスとは



1. 検証済みのメールアドレス、または検証済みのドメインでしかメールの送受信ができない
2. 1日あたり200通しかメールを送信できない
3. 1秒あたり1メッセージしか送信できない

https://docs.aws.amazon.com/ja_jp/ses/latest/dg/request-production-access.html

3. Amazon SESで使用するメールアドレスの登録

1. AWSにログイン後、検索欄より「simple email service」を入力し、「Amazon Simple Email Service」をクリックします。
search ses
2. 左ナビゲーションメニューの「検証済みID」をクリックし、「IDの作成」ボタンをクリックします。
id list
3. 「IDタイプ」で「Eメールアドレス」を選択し、Eメールアドレス入力欄に任意のアドレスを入力し、「IDの作成」ボタンをクリックします。
create id
4. 先ほど入力したメールアドレス宛に以下のメールが届くのでリンクをクリックします。
check email
5. リンククリック後に以下のページが表示されることを確認します。
email check complete
6. 左ナビゲーションメニューの「検証済みID」をクリックします。一覧に登録したメールアドレスが表示され、IDステータスが「検証済み」になっていることを確認します。
id list

4. メールのテスト送信

1. 左ナビゲーションメニューの「検証済みID」をクリックします。一覧の「ID」列に表示されているメールアドレスをクリックします。
id list
2. 「テストEメールの送信」をクリックします。
id detail
3. Eメール形式に「フォーマット済み」を選択し、シナリオに「カスタム」を選択します。カスタム受信者に前項で登録したメールアドレスを入力します。「件名」と「本文」に任意の値を入力して「テストEメールの送信」をクリックします。
send test mail
4. 前項で登録したメールアドレス宛へメールが届いていることを確認します。併せて件名と本文が上記で設定した内容と一致していることも確認します。受信トレイにメールが見当たらない場合は迷惑メールを確認してください。

5. Amazon SESメールの送信機能の実装

実装するにあたりアプリの環境は以下のとおりです。
フレームワーク: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()を呼ぶことでメールを送信することができます。


以上で全ての手順は完了になります