ブログのシステムにはメールで記事を投稿できる便利機能が使えるものがあります。これを利用してplayframework1での処理結果をブログ投稿することを思いつきました。
とはいえ、これまでメール機能について触れる機会が無かったので、あらためて調べなおすことに。とりあえずoutlookアカウントを送信元にしてメールを送信してみたい。
(メール本文は、MVCのテンプレートとほぼ同様にレンダリングできるようですが、今回は送信設定の方を確立させることを優先)
Outlook.com側の接続仕様を調べると下記のページがヒットしました。このうちSMTPの設定を利用します。
・IMAP サーバー名 outlook.office365.com
Outlook.com の POP、IMAP、および SMTP の設定 – Outlook (microsoft.com)
・IMAP ポート: 993
・IMAP 暗号化方法 TLS
・POP サーバー名のoutlook.office365.com
・POP ポート: 995
・POP 暗号化方法 TLS
・SMTP サーバー名: smtp-mail.outlook.com
・SMTP ポート: 587
・SMTP 暗号化方法 STARTTLS
一方で、playframework1のメール送信に関する設定項目は下表のような感じ。
設定 | 説明 |
---|---|
mail.smtp=mock | モックメールシステムを有効にする。(メール送信を行わない) |
mail.smtp.from | デフォルト送信者の設定。fromAddress未指定時に有効。 |
mail.smtp.host | SMTPサーバ名。 |
mail.smtp.protocol=smtps | STARTTLSとして扱い、 |
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
内にそのまま記述するのは避けましょう。ソースが流出したときに影響が大きくなるためです。 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を継承したクラスを使うといい感じで行えるようです。