[play1-mail]メール機能について

  playframework1

ブログのシステムにはメールで記事を投稿できる便利機能が使えるものがあります。これを利用してplayframework1での処理結果をブログ投稿することを思いつきました。

とはいえ、これまでメール機能について触れる機会が無かったので、あらためて調べなおすことに。とりあえずoutlookアカウントを送信元にしてメールを送信してみたい。

(メール本文は、MVCのテンプレートとほぼ同様にレンダリングできるようですが、今回は送信設定の方を確立させることを優先)

Outlook.com側の接続仕様を調べると下記のページがヒットしました。このうちSMTPの設定を利用します。

・IMAP サーバー名 outlook.office365.com
・IMAP ポート: 993
・IMAP 暗号化方法 TLS
・POP サーバー名のoutlook.office365.com
・POP ポート: 995
・POP 暗号化方法 TLS
SMTP サーバー名: smtp-mail.outlook.com
SMTP ポート: 587
SMTP 暗号化方法 STARTTLS

Outlook.com の POP、IMAP、および SMTP の設定 – Outlook (microsoft.com)

一方で、playframework1のメール送信に関する設定項目は下表のような感じ。

設定説明
mail.smtp=mockモックメールシステムを有効にする。(メール送信を行わない)
mail.smtp.fromデフォルト送信者の設定。fromAddress未指定時に有効。
mail.smtp.hostSMTPサーバ名。
mail.smtp.protocol=smtpsSTARTTLSとして扱い、
mail.smtp.channel“clear” or “starttls” → port=25
“ssl” → port=465
mail.smtp.userユーザID
mail.smtp.pass or mail.smtp.passwordパスワード
mail.smtp.authenticatorカスタム認証クラス
mail.debug“true” or “false”
mail.*基本的にmail.で始まる設定はJavaMailのプロパティへコピーされる。
application.conf

パスワードなど機密性の高い情報は application.conf内にそのまま記述するのは避けましょう。ソースが流出したときに影響が大きくなるためです。 mail.smtp.password=${mailPassword} のようにしておくことで同名のシステムプロパティや環境変数を参照してくれます。

以上を踏まえて、outlook.com用の設定を書きました。

# mail.smtp=mock
mail.smtp.host=smtp-mail.outlook.com
mail.smtp.user=${mail_user}
mail.smtp.pass=${mail_pass}
mail.smtp.protocol=smtps
mail.smtp.port=587
mail.debug=true

パスワードはアプリパスワードというのを設定します。

Microsoftアカウント>セキュリティ>高度なセキュリティオプション を選択。
アプリパスワードという項目の「新しいアプリ パスワードの作成」をクリックします。

そこで作成されたパスワードを設定します。

メール送信テストは下記コードで行いました。

    SimpleEmail email = new SimpleEmail();
    email.setFrom("komina77@outlook.jp");
    email.addTo("example@gmail.com");
    email.setSubject("subject");
    email.setMsg("Message");

    Future<Boolean> x = Mail.send(email);
    x.get();

テンプレートを使用した定型メールなど送信したい場合は、play.mvc.Mailerを継承したクラスを使うといい感じで行えるようです。

LEAVE A COMMENT