ホームページ  >  記事  >  バックエンド開発  >  [ Laravel 5.2 ドキュメント ] サービス -- メール

[ Laravel 5.2 ドキュメント ] サービス -- メール

WBOY
WBOYオリジナル
2016-06-20 12:37:541013ブラウズ

1. はじめに

Laravel は、SwiftMailer ライブラリに基づいたクリーンでリフレッシュされた電子メール API を提供します。 Laravel は SMTP、Mailgun、Mandrill、Amazon SES、PHP のメール機能、sendmail 用のドライバーを提供しており、ローカルまたはクラウド サービスを通じて電子メールを迅速に送信できます。

メール ドライバーの予備知識

Mailgun や Mandrill などのドライバーベースの API は、一般に SMTP サーバーよりもシンプルで高速です。すべての API ドライバーでは、アプリケーションに Guzzle HTTP ライブラリがインストールされている必要があります。次の行をcomposer.json ファイルに追加することで、プロジェクトに Guzzle をインストールできます:

"guzzlehttp/guzzle": "~5.3|~6.0"

Mailgun driver

Mailgun ドライバーを使用するには (Mailgun は最初の 10,000 通の電子メールに対して無料です)以降の料金は有料です), まず Guzzle をインストールし、次に設定ファイル config/mail.php でドライバー オプションを mailgun に設定します。次に、設定ファイル config/services.php に次のオプションが含まれていることを確認します。

'mailgun' => [    'domain' => 'your-mailgun-domain',    'secret' => 'your-mailgun-key',],

Mandrill ドライバー

Mandrill ドライバーを使用するには (Mandrill は中国でのユーザー登録をサポートしていません。汗) !)、まず Guzzle をインストールしてから、構成ファイル config/mail.php でドライバー オプションの値を mandrill に設定します。次に、設定ファイル config/services.php に次のオプションが含まれていることを確認します。

'mandrill' => [    'secret' => 'your-mandrill-key',],

SES ドライバー

Amazon SES ドライバー (有料) を使用するには、Amazon AWS をインストールします。 PHP SDK では、composer.json ファイルの require セクションに次の行を追加してライブラリをインストールできます:

"aws/aws-sdk-php": "~3.0"

次に、構成ファイル config/mail.php のドライバー オプションを ses に設定します。 。次に、構成ファイル config/services.php に次のオプションが含まれていることを確認します。

'ses' => [    'key' => 'your-ses-key',    'secret' => 'your-ses-secret',    'region' => 'ses-region',  // e.g. us-east-1],

2. 電子メールの送信

Laravel では電子メール情報を保存できます。たとえば、電子メールを整理するには、resources/views ディレクトリの下に電子メール ディレクトリを作成します。

メッセージを送信するには、メール ファサードの send メソッドを使用します。 send メソッドは 3 つのパラメータを受け取ります。最初のパラメータは電子メール情報を含むビューの名前です。2 番目のパラメータはビューに渡す配列データです。3 番目のパラメータは受信者、件名をカスタマイズできます。および電子メールのその他の側面:

<?phpnamespace App\Http\Controllers;use Mail;use App\User;use Illuminate\Http\Request;use App\Http\Controllers\Controller;class UserController extends Controller{    /**     * 发送邮件给用户     *     * @param  Request  $request     * @param  int  $id     * @return Response     */    public function sendEmailReminder(Request $request, $id)    {        $user = User::findOrFail($id);        Mail::send('emails.reminder', ['user' => $user], function ($m) use ($user) {            $m->from('hello@app.com', 'Your Application');$m->to($user->email, $user->name)->subject('Your Reminder!');        });    }}

上の例ではユーザー キーを含む配列を渡したので、次のように電子メールにユーザー名を表示できます:

<?php echo $user->name; ?>

注: $message 変数は常にメール ビューに渡され、埋め込み添付ファイルが許可されるため、ビューのロードでメッセージ変数を渡さないようにする必要があります。

メッセージの構築

前述したように、send メソッドに渡される 3 番目のパラメーターは、電子メール メッセージ自体に複数のオプションを指定できるクロージャです。このクロージャーを使用して、メッセージの他のプロパティ (CC、グループなど) を指定します。

Mail::send('emails.welcome', $data, function ($message) {    $message->from('us@example.com', 'Laravel');    $message->to('foo@example.com')->cc('bar@example.com');});

$message メッセージ ビルダー インスタンスでは次のメソッドが使用できます:

$message->from($address, $name = null);$message->sender($address, $name = null);$message->to($address, $name = null);$message->cc($address, $name = null);$message->bcc($address, $name = null);$message->replyTo($address, $name = null);$message->subject($subject);$message->priority($level);$message->attach($pathToFile, array $options = []);// 从$data字符串追加文件...$message->attachData($data, $name, array $options = []);// 获取底层SwiftMailer消息实例...$message->getSwiftMessage();

注: Mail::send クロージャに渡されるメッセージ インスタンスは SwiftMailer メッセージ クラスを継承するため、そのクラスの任意のメソッドを呼び出して独自の電子メール メッセージを作成できます。

プレーン テキスト メッセージ

デフォルトでは、send メソッドに渡されるビューには HTML が含まれていると想定されますが、send メソッドの最初の引数として配列を渡すことで、 HTML ビューに加えてプレーン テキスト ビューを送信するように指定できます:

Mail::send(['html.view', 'text.view'], $data, $callback);

あるいは、プレーン テキストの電子メールを送信するだけの場合は、配列でテキスト キーを指定できます:

Mail::send(['text' => 'view'], $data, $callback);

ネイティブ文字 文字列電子メール

生の文字列電子メールを直接送信したい場合は、生のメソッドを使用できます:

Mail::raw('Text to e-mail', function ($message) {    //});

2.1 添付ファイル

電子メールに添付ファイルを追加するには、クロージャの $message オブジェクトの Attach メソッドに pass を使用します。このメソッドは、最初の引数としてファイルへの絶対パスを受け取ります:

Mail::send('emails.welcome', $data, function ($message) {    //    $message->attach($pathToFile);});

メッセージにファイルを追加するとき、2 番目の引数として配列を渡すことでファイルの表示名と MIME タイプを指定することもできます。

$message->attach($pathToFile, ['as' => $display, 'mime' => $mime]);

2.2 インライン添付ファイル

メールビューへの画像の埋め込み

電子メールへのインライン画像のネストは、多くの場合扱いにくいですが、Laravel では次のことが可能です。電子メールに画像を添付し、対応する CID を取得する便利な方法。インライン画像を埋め込むには、電子メール ビューの $message 変数で embed メソッドを使用します。 Laravel は、$message 変数をすべてのメール ビューに自動的に渡して利用可能にすることを忘れないでください。

<body>    Here is an image:    <img src="<?php echo $message->embed($pathToFile); ?>"></body>

メール ビューへのネイティブ データの埋め込み

メール メッセージに埋め込みたい場合ネイティブ データ文字列の場合は、$message 変数で embedData メソッドを使用できます。

<body>    Here is an image from raw data:    <img src="<?php echo $message->embedData($data, $name); ?>"></body>

2.3 Mail Queue

Mail Message Queue

メール メッセージの送信には、かなりの時間がかかる場合があります。アプリケーションの応答時間を改善するために、多くの開発者はメールをキューに入れて送信し、それをバックグラウンドで実行することを選択します。Laravel は組み込みの統合キュー API を使用してこれを実現します。電子メール メッセージをキューに入れるには、メール ファサードでキュー メソッドを使用します。

Mail::queue('emails.welcome', $data, function ($message) {    //});

このメソッドは、バックグラウンドで送信するために電子メール タスクを自動的にキューにプッシュします。もちろん、この機能を使用する前にキューを設定する必要があります。

遅延メッセージキュー

如果你想要延迟已经放到队列中邮件的发送,可以使用 later方法。只需要传递你想要延迟发送的秒数作为第一个参数到该方法即可:

Mail::later(5, 'emails.welcome', $data, function ($message) {    //});

推入指定队列

如果你想要将邮件消息推送到指定队列,可以使用 queueOn和 laterOn方法:

Mail::queueOn('queue-name', 'emails.welcome', $data, function ($message) {    //});Mail::laterOn('queue-name', 5, 'emails.welcome', $data, function ($message) {    //});

3、邮件&本地开发

开发发送邮件的应用时,你可能不想要真的发送邮件到有效的电子邮件地址,而只是想要做下测试。Laravel提供了几种方式“禁止”邮件的实际发送。

日志驱动

一种解决方案是在本地开发时使用 log邮件驱动。该驱动将所有邮件信息写到日志文件中以备查看,想要了解更多关于每个环境的应用配置信息,查看配置文档。

通用配置

Laravel提供的另一种解决方案是为框架发送的所有邮件设置通用收件人,这样的话,所有应用生成的邮件将会被发送到指定地址,而不是实际发送邮件指定的地址。这可以通过在配置文件 config/mail.php中设置 to选项来实现:

'to' => [    'address' => 'dev@domain.com',    'name' => 'Dev Example'],

Mailtrap

最后,你可以使用 Mailtrap服务和 smtp驱动发送邮件信息到“虚拟”邮箱,这种方法允许你在Mailtrap的消息查看器中查看最终的邮件。

4、 事件

Laravel 会发送邮件前触发一个事件,记住,这个事件是在邮件被发送时触发,而不是推送到队列时,你可以在 EventServiceProvider中注册事件监听器:

/** * The event listener mappings for the application. * * @var array */protected $listen = [    'Illuminate\Mail\Events\MessageSending' => [        'App\Listeners\LogSentMessage',    ],];
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。