ムラウチドットコム エンジニアブログ

日本最大級ブログランキング「にほんブログ村」、シンプルなブログサービス「muragon」を運営するムラウチドットコム メディアグループのエンジニアブログです。

Amazon SESでメールアドレスに表示名を設定する方法

Amazon SES (Simple Email Service)でメール送信を行う際、FromやToに設定するメールアドレスに表示名を設定する方法をご紹介します。


今回はAWS SDK for JavaJavaMailを使用します。


AWS SDKを使用したSESのメール送信は次のようになります。

/* From */
String from = "sato@example.com";
/* To */
/* DestinationにはCcやBccも設定可能 */
Destination destination = new Destination().withToAddresses("suzuki@example.com");
/* 件名 */
Content subject = new Content().withData("サンプル")
.withCharset("UTF-8");
/* 本文 */
Content bodyText = new Content().withData("サンプルメールです。")
.withCharset("UTF-8");

/* リクエスト */
SendEmailRequest request = new SendEmailRequest()
.withSource(from)
.withDestination(destination)
.withMessage(new Message().withSubject(subject)
.withBody(new Body().withText(bodyText)));

/* メール送信 */
AmazonSimpleEmailServiceClientBuilder.defaultClient()
.sendEmail(request);


AWS SDKには表示名を設定する専用のメソッドは用意されていませんが、メールヘッダと同様の形式で文字列をそのまま渡すことで設定することができます。

佐藤 <sato@example.com>


ただ、表示名にマルチバイトを設定する場合はエンコードが必要になります。
以下はUTF-8でBエンコードした場合です。

?UTF-8?B?5L2Q6Jek?= <sato@example.com>


エンコードするにはJavaMailの InternetAddress を使用するか、同じくJavaMailの MimeUtility を使用する方法があります。


InternetAddressを使用する方法

生成したInternetAddressを文字列化することでエンコードされた文字列を取得できます。

String from = new InternetAddress("sato@example.com", "佐藤", "UTF-8").toString();


MimeUtilityを使用する方法

MimeUtilityのencodeWordメソッドを使用し、自前でヘッダを組み立てます。InternetAddressのtoStringメソッドは内部でencodeWordメソッドを呼び出しています。

String from = new StringBuilder()
.append(MimeUtility.encodeWord("佐藤", "UTF-8", null))
.append(" <")
.append("sato@example.com")
.append(">")
.toString();


encodeWordメソッドで明示的にエンコードを指定しない場合、ASCII文字が含まれているとQエンコード、それ以外はBエンコードになります。


×

非ログインユーザーとして返信する

あと 2000文字

※は必須項目です。