設定

Laravelは人気のあるSwiftMailerライブラリーのクリーンでシンプルなAPIを提供しています。メールの設定ファイルはapp/config/mail.phpです。SMTPホスト、ポート、認証、更にライブラリーが送信するメッセージ全部に対するグローバルな送信元(from)アドレスなどを設定するオプションが用意されています。お好きなSMTPサーバーをご利用できます。メールの送信にPHPのmail機能を使用したい場合は、設定ファイルのdraivermailに変更してください。 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!');
});

またメッセージを登録する特定のキューか「チューブ」をqueueOnlaterOnメソッドを使用し、指定することも可能です。

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();