設定
Laravelは人気のあるSwiftMailerライブラリーのクリーンでシンプルなAPIを提供しています。メールの設定ファイルはapp/config/mail.php
です。SMTPホスト、ポート、認証、更にライブラリーが送信するメッセージ全部に対するグローバルな送信元(from)アドレスなどを設定するオプションが用意されています。お好きなSMTPサーバーをご利用できます。メールの送信にPHPのmail
機能を使用したい場合は、設定ファイルのdraiver
をmail
に変更してください。
sendmail
ドライバーも使用できます。
APIドライバー
Laravelではさらに、MailgunとMandrillのHTTP
APIドライバーを用意しています。これらのAPIは大抵の場合、SMTPサーバーよりもシンプルで早いです。両方のドライバー共に、Guzzle
4
HTTPライブラリーをアプリケーションにインストールする必要があります。以下の行をcomposer.json
ファイルに追加し、Guzzle
4をプロジェクトに追加してください。
"guzzlehttp/guzzle": "~4.0"
Mailgunドライバー
Mailgunドライバーを使用するには、app/config/mail.php
設定ファイル中のdriver
オプションをmailgun
に設定してください。次に、app/config/services.php
設定ファイルが、プロジェクトに存在していなければ作成してください。中身を以下のオプションにしてください。
'mailgun' => array(
'domain' => 'your-mailgun-domain',
'secret' => 'your-mailgun-key',
),
Mandrillドライバー
Mandrillドライバーを使用するには、app/config/mail.php
設定ファイル中のdriver
オプションを、mandrill
に設定してください。次に、app/config/services.php
設定ファイルが、プロジェクトに存在していなければ作成してください。中身を以下のオプションにしてください。
'mandrill' => array(
'secret' => 'your-mandrill-key',
),
ログドライバー
app/config/mail.php
設定ファイルのdriver
オプションをlog
に設定すると、全てのログファイルがログファイルに書き込まれます。そして、どの受取人に対しでも、実際には送信されなくなります。これは主に、素早くローカルでデバッグするときや、内容を確認する場合に便利です。
基本的な使い方
Mail::send
メソッドはメールメッセージを送信するために使用されます。
Mail::send('emails.welcome', array('key' => 'value'), function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
send
メソッドに渡される最初の引数は、メールの本文に使用されるビューの名前です。2つ目の引数はビューに渡されるデーターで、ほとんどの場合連想配列です。ビュー中、$key
により、データーのアイテムを参照できます。3つ目はクロージャーで、メッセージに様々なオプションを指定するために使用します。
注目:
$message
変数はいつでもメールのビューに渡され、埋め込まれます。ですから、この変数を渡す必要はありません。
HTMLビューに加え、プレーンテキストビューを指定することもできます。
Mail::send(array('html.view', 'text.view'), $data, $callback);
もしくは'html'か'text'をキーに使用し、片方のタイプだけのビューを指定することも可能です。
Mail::send(array('text' => 'view'), $data, $callback);
メールにカーボンコピーや添付ファイルなどのオプションも指定できます。
Mail::send('emails.welcome', $data, function($message)
{
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com')->cc('bar@example.com');
$message->attach($pathToFile);
});
添付ファイルをメッセージに付ける場合は、MIMEタイプと表示名のどちらか、もしくは両方を指定することもできます。
$message->attach($pathToFile, array('as' => $display, 'mime' => $mime));
注目:
Mail::send
クロージャーに渡されるメッセージのインスタンスは、SwiftMailer messageクラスを拡張しています。ですからメッセージを作成するため、このクラスのメソッドを呼び出すこともできます。
インラインの埋め込み
メールに画像をインラインで埋め込むことは典型的な厄介者です。しかしLaravelは画像をメールに付け、最適なCIDを得る便利な方法を提供しています。
メールのビューに画像を埋め込む
<body>
Here is an image:
<img src="<?php echo $message->embed($pathToFile); ?>">
</body>
メールのビューにロウ(raw)・データーを埋め込む
<body>
Here is an image from raw data:
<img src="<?php echo $message->embedData($data, $name); ?>">
</body>
$message
変数はいつもMail
クラスによりメールビューに渡されることに注目してください。
キュー使用メール
メールメッセージをキューイングする
メール送信はアプリケーションのレスポンスをとても遅くしてしまうため、多くの開発者はメールメッセージをバックグラウンドでキュー送信するようにしています。Laravelでは組み込みの共通キューAPIを使用することで簡単に取り扱えるようになっています。メールメッセージにキューを使用するには、Mail
クラスのqueue
メソッドをシンプルに使用してください。
Mail::queue('emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
もしくはlater
メソッドを使用し、メールを送信するまでの遅延秒数を指定することも可能です。
Mail::later(5, 'emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
またメッセージを登録する特定のキューか「チューブ」をqueueOn
かlaterOn
メソッドを使用し、指定することも可能です。
Mail::queueOn('queue-name', 'emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
メールとローカル開発
メールを送信するアプリケーションを開発する場合、ローカルもしくは開発環境からのメッセージ送信を無効にするほうが好ましいでしょう。そのためには、Mail::pretend
メソッドを呼び出すか、app/config/mail.php
設定ファイルでpretend
オプションをtrueにしてください。pretend
モードの場合、受取人に向け送信する代わりに、アプリケーションのログファイルに書き込まれます。
メールのPretendモードを有効にする。
Mail::pretend();