メール送信
- メールガン ドライバー
- Postmark ドライバー
- グローバルのアドレスから使用する
- 構成ビュー
- プレーン テキスト メッセージ
- データの表示
- パブリック プロパティ経由
- with メソッドを使用してディスクから添付ファイルを追加します
- #生データ添付ファイル
- インライン添付ファイル
- 埋め込み生データ添付ファイル
- カスタム SwiftMailer メッセージ
- Markdown 形式の Mailable クラス
- Markdown 形式で Mailables クラスを生成する
- Markdown メッセージを記述する
- ボタン コンポーネント
- #パネル コンポーネント
- テーブル コンポーネント
- #カスタム CSSメールの送信
- メール可能にレンダリング
- ブラウザでメール可能をプレビュー
- メール キュー
- メール メッセージをキューに追加
- 遅延メッセージ キュー
- 指定されたキューにプッシュ
- #デフォルト キュー
- #ローカライズされたメール可能
- ユーザー優先ロケール
- ログ ドライバー
- 一般構成
- メールトラップ## #######イベント########################
メール
SwiftMailerライブラリに基づいて提供されています。クリーンでリフレッシュされた電子メール API を開発しました。 。 Laravel は、SMTP、Mailgun、SparkPost、Amazon SES、PHP の mail 関数、および
sendmail用のドライバーを提供しており、ローカルまたはクラウド サービス経由で電子メールを迅速に送信できます。メール ドライバーの予備知識
Mailgun や SparkPost などの API ベースのドライバーは、通常、他のドライバーよりもシンプルで効率的です。 SMTP サーバー高速なので、可能であればこれらのサービスを使用してください。すべての API ドライバーでは、アプリケーションに Guzzle HTTP ライブラリがインストールされている必要があります。Composer パッケージ マネージャーを通じてインストールできます:
composer require guzzlehttp/guzzle
Mailgun ドライバーを使用するには(Mailgun 最初の 10,000 通のメールは無料ですが、それ以降は有料です)、まず Guzzle をインストールし、次に構成ファイルconfig/mail でdriver
オプションをmailgun
に設定します。 php。次に、構成ファイルconfig/services.phpに次のオプションが含まれていることを確認します。
'mailgun' => [ 'domain' => 'your-mailgun-domain', 'secret' => 'your-mailgun-key', ],
「US」
SparkPost driverSparkPost ドライバーを使用するには、まず Guzzle をインストールし、次に構成ファイルMailgun リージョン
を使用していない場合は、次のことができます。サービスで地域の端末プロファイルを定義します
:'mailgun' => [ 'domain' => 'your-mailgun-domain', 'secret' => 'your-mailgun-key', 'endpoint' => 'api.eu.mailgun.net', ],
Postmark ドライバー
Postmark ドライバーを使用するには、Composer を介して Postmark の SwiftMailer をインストールします。
composer require wildbit/swiftmailer-postmark
次に、Guzzle と
config/mail.php## をインストールします。
#構成ファイルの driverオプションは
postmarkに設定されます。最後に、
config/services.php構成ファイルに次のオプションが含まれていることを確認します。
'postmark' => [ 'token' => 'your-postmark-token', ],
config/mail.php
で
driverオプションの値を
sparkpostに設定します。次に、構成ファイル
config/services.phpに次のオプションが含まれていることを確認します。
'sparkpost' => [ 'secret' => 'your-sparkpost-key', ],
必要に応じて、次のコマンドを使用してAPI エンドポイント を設定することもできます。
'sparkpost' => [ 'secret' => 'your-sparkpost-key', 'options' => [ 'endpoint' => 'https://api.eu.sparkpost.com/api/v1/transmissions', ], ],
SES driverAmazon SES ドライバー (有料) を使用するには、まず Amazon AWS PHP SDK をインストールします。これを行うには、に次の行を追加します。 combos.json
ファイルの
requireセクションを指定し、
composer updateコマンドを実行してライブラリをインストールします。
"aws/aws-sdk-php": "~3.0"
次に、構成ファイルをセットアップします。config/mail.php
の
driverオプションは
sesです。次に、構成ファイル
config/services.phpに次のオプションが含まれていることを確認します。
'ses' => [ 'key' => 'your-ses-key', 'secret' => 'your-ses-secret', 'region' => 'ses-region', // e.g. us-east-1 ],
SES の実行時に追加オプションを含める必要がある場合 SendRawEmail
リクエストでは、
ses構成で
options配列を定義できます:
'ses' => [ 'key' => 'your-ses-key', 'secret' => 'your-ses-secret', 'region' => 'ses-region', // e.g. us-east-1 'options' => [ 'ConfigurationSetName' => 'MyConfigurationSet', 'Tags' => [ [ 'Name' => 'foo', 'Value' => 'bar', ], ], ], ],
app/Mail
すべてのメール可能クラスの構成は、ディレクトリに保存されます。このディレクトリが表示されない場合でも、心配しないでください。このディレクトリは、
make:mailコマンドを使用して最初のメール可能クラスを作成するときに生成されます。
buildメソッドで完了します。このメソッドでは、次のような複数のメソッドを呼び出すことができます。from
、subject
、
view、および
attachを使用して、電子メールのコンテンツと送信を構成します。
from
メソッドを使用build
メソッドを呼び出すことです:メソッドの
fromphp artisan make:mail OrderShipped
Use global
from
addressただし、アプリケーションがすべての電子メールに同じ送信アドレスを使用する場合は、生成された各メール可能クラスで ## を呼び出します #from
config/mail.phpメソッドは面倒に思えます。代わりに、構成ファイル
config/mail.phpでグローバル送信アドレスを指定できます。これは、メール可能クラスで他の
fromアドレスが指定されていない場合に使用されます。
さらに、/** * 构建消息. * * @return $this */ public function build(){ return $this->from('example@example.com') ->view('emails.orders.shipped'); }
構成ファイルでグローバル
reply_to
アドレスを定義できます:'from' => ['address' => 'example@example.com', 'name' => 'App Name'],
構成ビューメール可能クラスの
buildメソッドで
resources/views# の下の他の場所に配置することもできます。 ## ディレクトリ。view
メソッドを使用して、レンダリングされた電子メール。どのビュー テンプレートを使用するか。通常、各電子メールはコンテンツのレンダリングに Blade テンプレートを使用するため、電子メール HTML を構築するときに Blade テンプレート エンジンが提供するすべての機能を使用できます。 {注:}resources/views/emails
ディレクトリを作成して、すべてのメール テンプレートを保存できます。もちろん、メール テンプレートを
text
電子メールをプレーン テキスト形式で定義する場合は、プレーン テキスト電子メール
メソッドを使用できます。viewメソッドと同様に、
textメソッドは、電子メール コンテンツのレンダリングに使用されるテンプレート名を受け取ります。プレーン テキスト メッセージまたは HTML メッセージを定義できます:
'reply_to' => ['address' => 'example@example.com', 'name' => 'App Name'],
パブリック プロパティ経由通常、いくつかのデータを渡す必要があります。レンダリングするメッセージの HTML ビューを使用できます。データをビューに渡す方法は 2 つあります。1 つ目は、メール可能クラスで定義されたパブリック プロパティが自動的にビューに渡されることです。したがって、メール可能クラスのコンストラクターにデータを渡し、そのデータをクラスのパブリック プロパティとして設定できます。
/** * 构建消息. * * @return $this */ public function build(){ return $this->view('emails.orders.shipped'); }
データがパブリック プロパティに設定されると、ビューで自動的に有効になります。したがって、Blade テンプレートの他のデータと同じようにアクセスできます:/** * 构建消息. * * @return $this */ public function build(){ return $this->view('emails.orders.shipped') ->text('emails.orders.shipped_plain'); }
with
メソッドを使用するデータをテンプレートに送信する前に電子メール データの形式をカスタマイズする場合は、
with
メソッド。通常、メール可能クラスのコンストラクターを介してデータを渡す必要がありますが、今回はデータをprotected
またはprivate
属性に設定する必要があります。ビュー内で自動的に有効になります。次に、with
メソッドが呼び出されたときに、配列データをメソッドに渡し、データがビュー テンプレートで有効になるようにします。<?php namespace App\Mail; use App\Order;use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderShipped extends Mailable{ use Queueable, SerializesModels; /** * 订单实例. * * @var Order */ public $order; /** * 创建一个新的消息实例. * * @return void */ public function __construct(Order $order) { $this->order = $order; } /** * 构建消息. * * @return $this */ public function build() { return $this->view('emails.orders.shipped'); } }
データがビューに渡された後、
電子メールに添付ファイルを追加するには、with
メソッドはビューで自動的に有効になるため、Blade テンプレート内の他のデータにアクセスするのと同じように、渡されたデータにアクセスすることもできます。buildメソッドのattach
メソッドを使用します。attach
メソッドは、最初の引数としてファイルへの絶対パスを受け取ります。
<div> Price: {{ $order->price }} </div>
ファイルをメッセージに添付するとき、
arrayを # に渡すこともできます。 ##attach
メソッドを 2 番目のパラメータとして使用し、表示名や MIME タイプを指定します。<?php namespace App\Mail; use App\Order; use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderShipped extends Mailable{ use Queueable, SerializesModels; /** * 订单实例. * * @var Order */ protected $order; /** * 创建一个新的实例. * * @return void */ public function __construct(Order $order) { $this->order = $order; } /** * 构建消息. * * @return $this */ public function build() { return $this->view('emails.orders.shipped') ->with([ 'orderName' => $this->order->name, 'orderPrice' => $this->order->price, ]); } }
attachFromStorageディスクから添付ファイルを追加
ある場合ファイルがストレージに保存されている場合は、
メソッドを使用して電子メールに添付できます。<div> Price: {{ $orderPrice }} </div>
必要に応じて、
attachFromStorageメソッドを使用できます。 2 番目と 3 番目パラメータでは、添付ファイル名とその他のオプションを指定します:
attachFromStorageDisk
デフォルトのディスク以外のストレージ ディスクを指定する必要がある場合は、/** * Build the message. * * @return $this */ public function build() { return $this->view('emails.orders.shipped') ->attach('/path/to/file'); }
メソッドを使用できます:
/** * Build the message. * * @return $this */ public function build() { return $this->view('emails.orders.shipped') ->attach('/path/to/file', [ 'as' => 'name.pdf', 'mime' => 'application/pdf', ]); }
生データの添付ファイル
attachDataバイト データを添付ファイルとして使用できます。たとえば、この方法を使用して、メモリ内で生成されてディスクには保存されない PDF を電子メールに添付できます。attachDataメソッドの最初のパラメータは生のバイト データを受け取り、2 番目のパラメータはファイル名で、3 番目のパラメータは他のパラメータを指定する配列を受け取ります。
$message#インライン添付ファイル
電子メールにインライン画像を埋め込むのは面倒な場合が多いですが、Laravel では電子メールに画像を添付して適切な CID を簡単に取得する方法が提供されています。インライン画像は、電子メール テンプレートの
変数の embed メソッドを使用して埋め込むことができます。 Laravel は自動的に
$message変数をすべてのメール テンプレートで利用できるようにします。手動で渡すことを心配する必要はありません:/** * 构建消息。 * * @return $this */ public function build(){ return $this->view('email.orders.shipped') ->attachFromStorage('/path/to/file'); }
{note}$message
inテキスト テキスト メッセージではインライン添付ファイルを使用できないため、メッセージでは使用できません。
元のデータ添付ファイルを埋め込む
電子メール テンプレートに埋め込みたい元のデータ文字列が既にある場合は、
$メッセージの
embedDataメソッドを使用できます。
変数:/** * 构建消息。 * * @return $this */ public function build(){ return $this->view('email.orders.shipped') ->attachFromStorage('/path/to/file', 'name.pdf', [ 'mime' => 'application/pdf' ]); }
##カスタム SwiftMailer メッセージMailable
withSwiftMessage#基本クラスの ## メソッド 元の SwiftMailer メッセージをコールバックの引数として使用して、メッセージの送信前に呼び出されるコールバックを登録できます。
# #Markdown 形式の Mailable クラス
Markdown 形式のメール可能メッセージでは、メール可能クラスの事前に構築されたテンプレートと電子メール通知コンポーネントの利点を活用できます。メッセージは Markdown で記述されるため、Laravel は美しく応答性の高い HTML テンプレート メッセージをレンダリングし、テキスト コピーを自動的に生成できます。
マークダウン形式でメール可能クラスを生成する
マークダウン テンプレートを適用するメール可能ファイルを生成するには、次のコードを使用できます。 --markdown オプション
make:mailアーティザン コマンド:/** * 构建消息。 * * @return $this */ public function build(){ return $this->view('email.orders.shipped') ->attachFromStorageDisk('s3', '/path/to/file'); }
次に、
markdown を呼び出して、build
markdownメソッドで mailable を構成します。
viewメソッドの代わりに
メソッドを使用します。このメソッドは、Markdown テンプレート名と、テンプレート内で使用可能な名前のオプションの配列を受け入れます:
/** * Build the message. * * @return $this */ public function build() { return $this->view('emails.orders.shipped') ->attachData($this->pdf, 'name.pdf', [ 'mime' => 'application/pdf', ]); }
Markdown メッセージの記述
Markdown mailable は、Blade コンポーネントと Markdown 構文の組み合わせを使用するため、Laravel プレハブ コンポーネントをより便利に使用して電子メール メッセージを作成できるようになります:
{tip} Markdown メールを書くときに使用します 余分なインデント。 Markdown パーサーは、インデントされたコンテンツをコード ブロックにレンダリングします。<body> Here is an image: <img src="{{ $message->embed($pathToImage) }}"> </body>
Button コンポーネント
Button コンポーネントは、中央揃えのボタン リンクをレンダリングします。このコンポーネントは 2 つのパラメータ
colorurl
とオプションでを受け入れます。カラー オプションは、primary、
success、および
error
をサポートします。ボタン コンポーネントはメッセージに好きなだけ追加できます。<body> Here is an image from raw data: <img src="{{ $message->embedData($data, $name) }}"> </body>
パネル コンポーネント
パネル コンポーネントは、パネル内の特定のテキスト ブロックをレンダリングします。メッセージ 背景の色が少し異なります。警告テキスト ブロックを描画できます:
/** * 构建消息。 * * @return $this */ public function build(){ $this->view('emails.orders.shipped'); $this->withSwiftMessage(function ($message) { $message->getHeaders() ->addTextHeader('Custom-Header', 'HeaderValue'); }); }
Table コンポーネントTable コンポーネントを使用すると、Markdown テーブルを HTML テーブルに変換できます。このコンポーネントは、コンテンツとして Markdown テーブルを受け入れます。列の配置は、デフォルトの Markdown テーブル配置構文をサポートしています:
php artisan make:mail OrderShipped --markdown=emails.orders.shipped
カスタム コンポーネント
すべての Markdown 電子メール コンポーネントを独自のアプリケーションにエクスポートし、カスタム コンポーネントのテンプレートとして使用できます。これらのコンポーネントをエクスポートするには、
laravel-mail
アセット タグを指定してvendor:publish
Artisan コマンドを使用します。/** * Build the message. * * @return $this */ public function build(){ return $this->from('example@example.com') ->markdown('emails.orders.shipped'); }
このコマンドは、Markdown メール コンポーネントを
にエクスポートします。 resource/views/vendor/mail
ディレクトリ。mail
ディレクトリには、html
およびtext
サブディレクトリが含まれており、これらのサブディレクトリには、使用可能なコンポーネントの対応する説明が含まれています。これらのコンポーネントは必要に応じてカスタマイズできます。カスタマイズされた CSS
構成がエクスポートされると、
resources/views/vendor/mail/html/themes
ディレクトリにはが追加されます。デフォルトの.css
ファイル。 CSS はこのファイルからカスタマイズでき、これらのスタイルはマークダウン電子メール メッセージの HTML 表現に自動的にインライン化されます。
メールの送信メールを送信するには、{ヒント} Markdown コンポーネントの完全な新しいテーマを作成する場合は、
html/themes
ディレクトリに新しい CSS ファイルを作成し、## を変更します。 #mail設定 ファイルの
themeオプション。
Mail
ファサード # を使用します。 ##から
メソッド。to
メソッドは、電子メール アドレス、ユーザー インスタンス、またはユーザー コレクションを受け入れます。オブジェクトまたはオブジェクトのコレクションを渡す場合、メーラーは受信者を設定するときにemail
プロパティとname
プロパティを自動的に使用するため、これらのプロパティがオブジェクトで使用できることを確認してください。受信者を指定したら、メール可能クラスのインスタンスをsend
メソッドに渡すことができます。
メッセージを送信するときに指定できるのは受信者だけではありません。 「to」、「cc」、「bcc」へのチェーン呼び出しを通じて Cc および Bcc 受信者を一度に指定することもできます。@component('mail::message') # 订单已发货 Your order has been shipped! @component('mail::button', ['url' => $url]) View Order @endcomponent Thanks,<br> {{ config('app.name') }} @endcomponent
@component('mail::button', ['url' => $url, 'color' => 'success']) View Order @endcomponent
##メール可能ファイルのレンダリングメール可能ファイルを送信せずに、その HTML コンテンツをキャプチャしたい場合があります。これは、mailable のrender
メソッドを呼び出すことで実現できます。このメソッドは、メール可能レンダリング後に計算された文字列を返します。@component('mail::panel') This is the panel content. @endcomponent
メール可能デザインをテンプレート化する場合、 Blade テンプレートと同様に、ブラウザでメール可能ファイルをプレビューおよびレンダリングするのに便利です。この場合、Laravel では、メール可能ファイルをルート クロージャまたはコントロールで直接返すことができます。返されたメール可能ファイルはブラウザーにレンダリングされて表示されるため、実際の電子メール アドレスに送信しなくても、デザインをすばやくプレビューできます:@component('mail::table') | Laravel | Table | Example | | ------------- |:-------------:| --------:| | Col 2 is | Centered | | | Col 3 is | Right-Aligned | | @endcomponent
##電子メール メッセージをキューに追加する
電子メール メッセージを送信するとアプリケーションの応答時間が大幅に長くなる可能性があるため、多くの開発者は電子メール メッセージをキューに追加してバックグラウンドで送信することを選択します。 Laravel は、組み込みの統合キュー API を使用してこれを簡単にします。メール メッセージをキューに追加するには、メッセージの受信者を指定した後、
Mail
ファサードのqueue
メソッドを使用できます。php artisan vendor:publish --tag=laravel-mail
このメソッドは、自動的にプッシュします。メッセージをバックグラウンドで送信できるようにジョブをキューに追加します。この機能を使用する前に、キューを設定する必要があります。
遅延メッセージ キュー
キューに入れられた電子メール メッセージの送信を遅らせたい場合は、
を使用できます。後ほど
メソッドを使用します。later
メソッドの最初のパラメーターは、メッセージがいつ送信されるかを示します。DateTime
例:<?php namespace App\Http\Controllers; use App\Order;use App\Mail\OrderShipped; use Illuminate\Http\Request; use Illuminate\Support\Facades\Mail; use App\Http\Controllers\Controller; class OrderController extends Controller{ /** * 发送给定的订单。 * * @param Request $request * @param int $orderId * @return Response */ public function ship(Request $request, $orderId) { $order = Order::findOrFail($orderId); // 发送订单... Mail::to($request->user())->send(new OrderShipped($order)); } }
指定されたキューにプッシュします
make:mail
コマンドを使用して生成されたすべてのメール可能クラスはIlluminate\Bus\Queueable
トレイトを使用するため、任意のメール可能クラス インスタンスでこれを使用できます。 onQueueメソッドと
onConnectionメソッドを使用してメッセージ接続とキュー名を指定します。
Mail::to($request->user()) ->cc($moreUsers) ->bcc($evenMoreUsers) ->send(new OrderShipped($order));
Default queueIf a mailable クラスは最終的にShouldQueue
コントラクトをこのクラスに実装できます。こうすることで、送信時に
sendメソッドを呼び出した場合でも、メール可能ファイルはシリアル化されます。
$invoice = App\Invoice::find(1); return (new App\Mail\InvoicePaid($invoice))->render();
Localized MailableLaravel では、現在の言語とは異なるロケールを使用してメール可能ファイルを送信でき、キューに追加された場合でもそのロケールを保持できます。 この目的を達成するために、Mail
ファサードは、ターゲット言語を設定するための
localeメソッドを提供します。メール可能ファイルをフォーマットするアプリケーションはこのロケールに切り替わり、フォーマットが完了すると元のロケールに戻ります:
Route::get('mailable', function () { $invoice = App\Invoice::find(1); return new App\Mail\InvoicePaid($invoice); });
ユーザー優先ロケールはい、アプリケーションは次のロケールを保存します。各ユーザーの優先ロケール。HasLocalePreference
コントラクトを 1 つ以上のモデルに実装することで、電子メールを送信するときに保存されているロケールを使用するように Laravel に指示できます。
Mail::to($request->user()) ->cc($moreUsers) ->bcc($evenMoreUsers) ->queue(new OrderShipped($order));
このインターフェースが実装されると、Laravel はこのモデルに電子メールを送信します。 . メール可能および通知の場合、優先ロケールが自動的に使用されます。したがって、このインターフェイスを使用する場合、locale
メソッドを呼び出す必要はありません:
$when = now()->addMinutes(10);Mail::to($request->user()) ->cc($moreUsers) ->bcc($evenMoreUsers) ->later($when, new OrderShipped($order));
##Mail & Local Development電子メールを送信するアプリケーションを開発する場合、実際に実際の電子メール アドレスに電子メールを送信したくない場合があります。 Laravel は、ローカル開発中に実際の送信を「無効にする」方法をいくつか提供しています。
ログ ドライバー
log
電子メール ドライバーは、電子メールを送信する代わりに電子メール メッセージをログに書き込み、すぐに表示できるようにします。アプリケーション環境の構成の詳細については、構成ドキュメントを参照してください。共通構成
Laravel は、フレーム経由で送信されるメールの共通受信者を指定するための追加のソリューションを提供します。この方法では、アプリケーションによって生成された電子メールは、メッセージ送信時に指定された実際のアドレスを置き換えて、指定されたアドレスに送信されます。これは、
config/mail.php
構成ファイルのto
オプションを使用して実現できます:$message = (new OrderShipped($order)) ->onConnection('sqs') ->onQueue('emails');Mail::to($request->user()) ->cc($moreUsers) ->bcc($evenMoreUsers) ->queue($message);
Mailtrap
最後に、Mailtrap サービスと
smtp
ドライバーを使用して電子メール メッセージを「仮想」メールボックスに送信すると、電子メール メッセージを実際の電子メールで表示できるようになります。クライアント。この方法の利点は、Mailtrap のメッセージ ビューアで最終的な電子メールを実際に表示できることです。イベント
Laravel は、電子メール メッセージの送信を処理するときに 2 つのイベントをトリガーします。
MessageSending
イベントはメッセージの送信前にトリガーされ、MessageSent
イベントはメッセージの送信後にトリガーされます。これらのイベントは、メッセージがキューに入れられたときではなく、送信されたときにトリガーされることに注意してください。このイベントのリスナーは、EventServiceProvider
:use Illuminate\Contracts\Queue\ShouldQueue; class OrderShipped extends Mailable implements ShouldQueue{ // }
に登録できます。この記事は、LearnKu.com Web サイトで最初に公開されました。