5.7. メール送信¶
目次
5.7.1. Overview¶
本節では、Amazon Simple Email Service(以下、Amazon SES)を使用したEメール送信の実装方法について説明する。
Note
本ガイドラインで説明の対象としているのはメールを送信する部分のみである。メール送信に係る処理方式については言及していない。
また、Amazon SESが提供する機能についても、公式ドキュメントと記述が重複する為、メール送信に直接関わらないものは説明を割愛している。 その為、本ガイドラインだけでなく、Amazon SESの公式ドキュメントAmazon Simple Email Service (SES)を必ず参照した上で、開発に臨んで頂きたい。
5.7.1.1. Amazon SESとは¶
5.7.1.2. JavaアプリケーションからのAmazon SESの利用¶
Amazon Web Serviceでは、JavaアプリケーションからAmazon SESを利用する為のAPIを提供している。
- Amazon SES API(AWS SDK for Java)
com.amazonaws.services.simpleemail.AmazonSimpleEmailServiceClient
をはじめとする、AWSが提供するSDKに含まれるAmazon SES用のAPI。詳細についてはAWS SDK for Javaおよび Amazon SES APIを使用してEメールを送信するを参照されたい。
- SMTPインタフェース(Amazon SES SMTP Interface)
SMTPを使用してAmazon SESにメール送信する為のインタフェース。SMTPインタフェースの詳細についてはAmazon SES SMTPインターフェイスを使用してEメールを送信するを参照されたい。
5.7.1.3. Spring Cloud AWSのコンポーネントを使用したAmazon SESの利用¶
Spring Cloud AWSを利用したメール送信については、Spring Cloud AWSのドキュメントSending mailsに紹介されている為、本ガイドラインと合わせて参照されたい。
5.7.1.4. Spring Frameworkのコンポーネントを使用したAmazon SESの利用¶
org.springframework.mail
パッケージ)を提供している。本ガイドラインで使用するコンポーネントを以下に示す。
JavaMailSender
- JavaMail用のメール送信インタフェース。JavaMailのMimeMessageとSpringの
SimpleMailMessage
の両方に対応している。
MimeMessageHelper
- JavaMailのMimeMessageの作成を容易にするためのヘルパークラス。MimeMessageHelperには、MimeMessageに値を設定するための便利なメソッドがいくつも用意されている。
SimpleMailMessage
- 単純なメールメッセージを作成するためのクラス。英文のプレーンテキストメールを作成する際に使用できる。UTF-8等の特定のエンコード指定、HTMLメールや添付ファイル付きメールの送信、あるいはメールアドレスに個人名を付随させるといったリッチなメッセージの作成を行う際は、JavaMailの
MimeMessage
を使用する必要がある。
5.7.2. How to use¶
5.7.2.1. Amazon SESの設定¶
Note
メールの送信上限について
Amazon SESを利用する際には、24 時間当たりに送信できるメールの最大数と、1秒あたりに送信できるメールの最大数が存在する。制限はサンドボックス内・外どちらにも存在する。
送信上限は必要に応じて引き上げ申請が可能な為、 Amazon SES の送信制限の管理および Amazon SES の送信制限の引き上げを参照されたい。
Note
メールボックスシミュレータについて
テスト工程などでは、実在する宛先にメールを送らずに、バウンスやサプレッションリストへの送信確認などを行いたい場合が存在する。
Amazon SESはメールボックスシミュレータを提供している為、特定のアドレスをToに設定して送信することで、いくつかのシミュレートを行う事ができる。 詳細についてはAmazon SES Eメール送信のテストを参照されたい。
5.7.2.2. 依存ライブラリの設定¶
本ガイドラインで紹介する実装に必要となるライブラリの依存関係をpom.xmlに追加する。
記述例を以下に示す。
xxx-domain/pom.xml
<dependencies> <!-- (1) --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-aws</artifactId> </dependency> <!-- (2) --> <dependency> <groupId>com.amazonaws</groupId> <artifactId>aws-java-sdk-ses</artifactId> </dependency> <!-- (3) --> <dependency> <groupId>com.sun.mail</groupId> <artifactId>javax.mail</artifactId> </dependency> <!-- (4) --> <dependency> <groupId>com.sun.activation</groupId> <artifactId>javax.activation</artifactId> </dependency> </dependencies>
項番 説明 (1)spring-cloud-starter-aws
をdependenciesに追加する。(2)aws-java-sdk-ses
をdependenciesに追加する。(3)javax.mail
をdependenciesに追加する。(4)javax.activation
をdependenciesに追加する。
5.7.2.3. Spring Cloud AWSの設定¶
Spring Cloud AWSのメール送信コンポーネントを利用する為の設定を行う。
記述例を以下に示す。
- xxx-infra.xml
<!-- (1) --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:aws-mail="http://www.springframework.org/schema/cloud/aws/mail" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/cloud/aws/mail http://www.springframework.org/schema/cloud/aws/mail/spring-cloud-aws-mail.xsd"> <!-- (2) --> <aws-mail:mail-sender id="sesMailSender" region="us-east-1"/>
項番 属性名 内容 (1)xmlns:aws-mail aws-mail Namespaceを定義する。値としてhttp://www.springframework.org/schema/cloud/aws/mail
を指定する。xsi:schemaLocation スキーマのURLを指定する。値にhttp://www.springframework.org/schema/cloud/aws/mail
とhttp://www.springframework.org/schema/cloud/aws/mail/spring-cloud-aws-mail.xsd
を追加する。 (2)- <aws-mail:mail-sender/>
を利用して、Spring Cloud AWSが提供するJavaMailSender
の実装クラスをDIコンテナに登録する。id
JavaMailSender
の実装クラスがDIコンテナに登録される際のBeanIDとなる。region
Amazon SESで個別のリージョンを指定する必要がある場合、region
属性にリージョンを指定する。Note
本ガイドライン執筆現在、Amazon SESは限られたリージョンでしかサービスを提供していない。Amazon SES利用の際には留意して頂きたい。
なお、上記の設定は、Spring BootのAuto-configurationが提供するorg.springframework.cloud.aws.autoconfigure.mail.MailSenderAutoConfiguration
が無効になっている事が前提である。
デフォルトではMailSenderAutoConfiguration
は有効になっている為、本設定を行う際は、必ずAuto-configurationの設定を確認すること。
Note
MailSenderAutoConfiguration
が提供するBean定義では、Amazon SESをEC2とは異なるリージョンで使用する場合に、リージョン情報の差し替えに対応できない。
その為、本ガイドラインではaws-mail Namespaceを使用する方法を紹介している。
MailSenderAutoConfiguration
を無効にする設定例を以下に示す。
Bootstrap.java
package com.example.xxx.app; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.cloud.aws.autoconfigure.mail.MailSenderAutoConfiguration; import org.springframework.boot.web.support.SpringBootServletInitializer; // omitted @EnableAutoConfiguration(exclude = MailSenderAutoConfiguration.class) public class Bootstrap extends SpringBootServletInitializer { // omitted }
Note
上記の記述例は、
MailSenderAutoConfiguration
の除外にフォーカスして紹介している。Bootstrap
クラスのその他の定義例については、エントリポイントの作成 にて紹介している為、必要に応じて参照されたい。Warning
MailSenderAutoConfiguration
というクラス名のAuto-configurationクラスは複数存在する。除外する際はパッケージ名まで確認の上、
org.springframework.cloud.aws.autoconfigure.mail.MailSenderAutoConfiguration
を対象とすること。
5.7.2.4. SimpleMailMessageによるメール送信方法¶
英文のプレーンテキストメール(エンコードの指定や添付ファイル等が不要なメール)を送信する場合は、Springが提供しているSimpleMailMessage
クラスを使用する。
実装例については、Macchinetta Framework for Java (5.x) のガイドラインSimpleMailMessageによるメール送信方法を参照されたい。
5.7.2.5. MimeMessageによるメール送信方法¶
英文以外のメールやHTMLメール、添付ファイルの送信を行う場合、javax.mail.internet.MimeMessage
クラスを使用する。
本ガイドラインではMimeMessageHelper
クラスを使用してMimeMessageを作成する方法を推奨している。
実装例については、Macchinetta Framework for Java (5.x) のガイドラインMimeMessageによるメール送信方法を参照されたい。