Documentation

You are viewing the documentation for Play 1. The documentation for Play 2 is here.

Play による e メール送信

play.libs.Mail ユーティリティを使って、とても簡単にメールを送ることができます:

Mail.send("[email protected]","[email protected]","Subject","Message");

メールと MVC の統合

標準的なテンプレート機構と構文を使うことで、複雑で動的なメールを送信することもできます。

はじめに、アプリケーション内に メーラ通知者 を定義してください。メーラ通知者は play.mvc.Mailer のサブクラスであり、 notifiers パッケージに含まれていなければなりません。

MVC コントローラにおけるアクションのやり方と同じように、public かつ static なメソッドは、いずれもメールを送信します。

以下に例を示します:

package notifiers;
 
import play.*;
import play.mvc.*;
import java.util.*;
 
public class Mails extends Mailer {
 
   public static void welcome(User user) {
      setSubject("Welcome %s", user.name);
      addRecipient(user.email);
      setFrom("Me <[email protected]>");
      addAttachment(Play.getFile("rules.pdf"));
      send(user);
   }
 
   public static void lostPassword(User user) {
      String newpassword = user.password;
      setFrom("Robot <[email protected]>");
      setSubject("Your password has been reset");
      addRecipient(user.email);
      send(user, newpassword);
   }
 
}

text/html e メール

send の呼び出しは、メールのメッセージ本文として app/views/Mails/welcome.html テンプレートをレンダリングします。

<html><body><p>Welcome <b>${user.name}</b>, </p>
...
</html>

lostPassword メソッド用のテンプレートは以下のようになるかもしれません:

app/views/Mails/lostPassword.html

<html><body><head>...</head><body><img src="mycompany.com/images"/><p>Hello ${user.name},<br/>
Your new password is <b>${newpassword}</b>.
</p>
</body>
</html>

text/plain e メール

HTML テンプレートが定義されていない場合、テキストテンプレートを使った text/plain メールが送信されます。

send の呼び出しは、メールのメッセージ本文として app/views/Mails/welcome.txt テンプレートをレンダリングします。

Welcome ${user.name},
...

lostPassword メソッド用のテンプレートは以下のようになるかもしれません:

app/views/Mails/lostPassword.txt

Hello ${user.name},
 
Your new password is ${newpassword}.

text/plain 代替品を使った text/html e メール

HTML テンプレートが定義されていて、テキストテンプレートも存在する場合、テキストテンプレートは代替メッセージとして使用されます。先ほどの例において、

app/views/Mails/lostPassword.html

app/views/Mails/lostPassword.txt

の両方が定義されている場合、lostPassword.txt に定義された代替部分を持つ、lostPassword.html で定義された text/html E メールとして送信されます。このため、友達にすてきな HTML メールを送ることもできますし、いまだに mutt を使っているギークな友達を喜ばせることもできます ;)

SMTP の設定

E メール機能はアプリケーションの conf/application.conf ファイルにて設定されます。まず初めに、使用する smtp サーバを定義する必要があります:

mail.smtp.host=smtp.taldius.net

SMTP サーバが認証を求める場合は、以下のプロパティを使用してください:

mail.smtp.user=jfp
mail.smtp.pass=topsecret

チャネルとポート

暗号化された経路でメールを送るには、ふたつの方法があります。サーバが starttls コマンド (参考: RFC 2487) をサポートしている場合は、SSL/TLS に変換される 25 番ポートのクリアな接続を使用することができます。このため、以下の設定オプションを追加することで、この接続を使用することができます:

mail.smtp.channel=starttls

サーバは、465 番ポートでリッスンする SSL ソケットである smtp-over-ssl (SMTPS) コネクタもサポートするかもしれません。この場合は、以下の設定オプションを使って Play にこのコネクタを使用することを伝えます:

mail.smtp.channel=ssl

更なる設定

舞台裏では、Play は実際の SMTP トランザクションを実行するために JavaMail を使用します。何が行われているのか確認したい場合は、以下を試してみてください:

mail.debug=true

JavaMail で SSL 接続を取り扱うとき、デフォルトの振る舞いでは、リモートサーバ証明書がルート認証局によって署名されていない場合に接続を切断します。これは自己署名証明書を使用する特別な場合です。Play はデフォルトでこのチェックをスキップします。以下のプロパティを使用することで、これをコントロールすることができます:

mail.smtp.socketFactory.class

標準以外のポートでサーバに接続する必要がある場合、以下のプロパティでデフォルト設定をオーバーライドします:

mail.smtp.port=2500

Gmail の利用

gmail サーバを使用するには、以下の設定を使用してください:

mail.smtp.host=smtp.gmail.com
mail.smtp.user=yourGmailLogin
mail.smtp.pass=yourGmailPassword
mail.smtp.channel=ssl