Mail API でメールを送信する

Java 用の Mail サービス API では、メール メッセージを送信する JavaMailjavax.mail)インターフェースがサポートされています。

始める前に

送信者のメールアドレスを承認済み送信者として登録します。詳細については、メールを送信できるユーザーをご覧ください。

メールを送信する

メール メッセージを送信するには、App Engine SDK に含まれている JavaMail クラスを使用します。

JavaMail セッションの作成時に SMTP サーバー構成を指定しないと、App Engine は Mail サービスを使用してメッセージを送信します。または、サポートされているサードパーティのメール プロバイダ(MailgunMailjetSendGrid など)の SMTP 構成を追加します。

メールを送信するには:

  1. JavaMail Session オブジェクトを使用してメッセージを作成します。

  2. MimeMessage オブジェクトを作成します。

  3. InternetAddress クラスを使用して、メッセージの送信者と受信者を設定します。

    1. MimeMessage オブジェクトで setFrom() メソッドを呼び出し、送信者を指定します。2 番目のパラメータに文字列として個人名を指定することもできます。

    2. 受信者の種類とアドレスを addRecipient() メソッドに渡すことで、受信者を識別します。受信者のタイプは Message.RecipientType.TOMessage.RecipientType.CC、または Message.RecipientType.BCC です。

    メールアドレスが無効な場合、InternetAddress コンストラクタが AddressException を発生させます。

  4. 返信先のアドレスを設定するには、setReplyTo() メソッドを使用します。

  5. MimeMessage オブジェクトでメソッドを呼び出して、メッセージの内容を作成します。setSubject() で件名を設定し、setText() で平文形式のメッセージ本文を設定します。

  6. メッセージを送信するには、Transport クラスの静的メソッド send() を使用します。

Mail サービスでは、送信するメールに特定のヘッダーを使用できます。詳細については、使用可能なオプション ヘッダーをご覧ください。

以下に、メールを送信するコードの例を示します。

Properties props = new Properties();
Session session = Session.getDefaultInstance(props, null);

try {
  Message msg = new MimeMessage(session);
  msg.setFrom(new InternetAddress("admin@example.com", "Example.com Admin"));
  msg.addRecipient(Message.RecipientType.TO,
                   new InternetAddress("user@example.com", "Mr. User"));
  msg.setSubject("Your Example.com account has been activated");
  msg.setText("This is a test");
  Transport.send(msg);
} catch (AddressException e) {
  // ...
} catch (MessagingException e) {
  // ...
} catch (UnsupportedEncodingException e) {
  // ...
}

Mail サービスの呼び出しは非同期で、すぐに制御を返します。Mail サービスは、受信者のメールサーバーに接続し、メッセージを送信するプロセスを管理します。メッセージの送信で問題が発生した場合や、メールサーバーがバウンス メッセージを返した場合、エラー メッセージが送信者に表示されます。

マルチパート メッセージを送信する

ファイルが添付されたメッセージや、プレーン テキストの本文と HTML メッセージの本文から構成されるメッセージは、マルチパート メッセージとして送信できます。

マルチパート メッセージを送信するには:

  1. パートを格納する MimeMultipart オブジェクトを作成して、添付ファイルまたは別のメッセージ本文を格納する MimeBodyPart オブジェクトを作成し、それをコンテナに追加します。

  2. MimeMessage のコンテンツにコンテナを割り当てます。

以下に、マルチパート メッセージを送信するコードサンプルを示します。

String htmlBody = "";          // ...
byte[] attachmentData = null;  // ...
Multipart mp = new MimeMultipart();

MimeBodyPart htmlPart = new MimeBodyPart();
htmlPart.setContent(htmlBody, "text/html");
mp.addBodyPart(htmlPart);

MimeBodyPart attachment = new MimeBodyPart();
InputStream attachmentDataStream = new ByteArrayInputStream(attachmentData);
attachment.setFileName("manual.pdf");
attachment.setContent(attachmentDataStream, "application/pdf");
mp.addBodyPart(attachment);

msg.setContent(mp);

セキュリティ上の理由から、メッセージ部分と添付ファイルには許可されたタイプを使用してください。また、ファイル名の最後には、そのタイプで認識されている拡張子を付けてください。許可されるタイプとファイル名の拡張子の一覧については、添付ファイルを含むメールをご覧ください。