Laravel使ってみた (20) - Mail -
http://laravel.com/docs/mail のドキュメント読み。まぁ名前の通りなんでセクション的な所辺りをこなしてみる
Mail APIが使えるように設定
app/config内にmail.phpを設定しろっつーことで
メールを送る
メールを送るにはsendメソッドを使えば良い
Mail::send(
// 送るメール内容のビュー
"emails/sample",
// メール内容ビューにバインドするデータ。messageっていう変数名は避ける事
[ "diag" => "Hello World"],
function($msg) {
$msg->to("hoge@example.com")->subject("hello");
}
);
的な感じで使うんだけれども、これデフォルトだとtext/htmlな形式なメールで送られるらしい。テキストメール(text/plain)で送る場合には
Mail::send(
["text" => "emails.sample"]
// 以下省略
);
っていう感じにすれば良いらしい。又、ドキュメントには書いてないけどAPI Referenceにはplainっていうメソッドが使える模様。上記のtext/plainで送りたいのならば
Mail::plain(
"emails.sample"
// 以下省略
);
と同じな模様。なのでこっち使えば良いかと。で上記のメール送信なAPIは送信されるまでwaitされる訳なんだが、queue的な事でメールを送る事も出来る。そのAPIが
- queue: 指定したメールをキューサーバーを用いて処理する
- later: 第一引数に指定した秒数だけをwaitして後に送信する?
- queueOn: 第1引数に指定したキュー名でメールを処理する
ちなみにlaterOnっていうのもある模様
まー大体な使い方はこんな感じ。attachとかで添付ファイルとかをつけたりとかも出来る訳なんだけど、例えばデータベースにあるBLOBなデータとかの場合にはIlluminate\Mail\MessageにattachDataやembedDataっていうAPI等を利用する事で可能なのかも。そこんとこは未検証
とりあえずドキュメント読み終わり。今回は結構あっさりしてた
余談
Mail::pretendを使う事でメールを送らずにログに書きだすっていう方式が利用できる模様。Mail::pretendをするか、app/config/mail.php等の設定でpretendをtrueにすれば良い模様。pretendするとログに書き込まれるがそのメッセージ自体は送信先?のメールアドレスは記載されている模様。テストする名目とかであればそこチェックすればいいのかって所なのか
<?php
class HogeControllerTest extends TestCase {
public function test_send_email() {
Mail::pretend();
Log::listen(function($level, $message) {
$this->assertThat($level, $this->equalTo("info"));
});
$this->call("GET", "/");
}
}
Mail::prentedなログ書き込みはINFOレベルで入る模様。それでテスト十分ですっては正直言い切れない感はハンパない気がしますけど、んまぁテスト時に至らんメール大量発動しちゃうよりは良いかなと
とりあえずはMail::pretend使えばメールをログに書き出せる。但しアドレスだけ的な感じかと