Laravel で電子メールを送信するには、Laravel メーラー、Laravel メール可能クラス、およびメール ファサードの 3 つのコンポーネント間の連携が必要です。 3 つのそれぞれは、電子メール送信のライフサイクルの異なる側面を扱います。
メーラーは、アプリケーションが受信者に電子メールを転送するために使用できる電子メール送信サービス (AWS SES、Sendgrid、Mailgun など) に接続するドライバーです。
Laravel Mailable は、送信する電子メールのテンプレートを表す特別なクラスです。これには、内容、「宛先」フィールド、添付ファイルなど、電子メール メッセージの一般的な情報がすべて含まれています。
最後に、メール ファサードは、メーラー ドライバーを介してメール可能ファイルの実際の送信を要求するアクセス ポイントです。
このシステムを詳しく調査する機会がありましたが、現在、Inspector はピーク時に 1 時間あたり 6000 件を超えるメールを送信しています。
Laravel Mailable は最新のアプリケーションの重要なコンポーネントの 1 つであるため、私の経験がフレームワークのこのコンポーネントをより深く理解するのに役立つことを願っています。
さらに技術的な記事については、Linkedin または X でフォローしてください。
Laravel のメーラードライバーの設定は config/mail.php ファイルにあります。それぞれが名前とトランスポートドライバーによって特徴づけられる複数のメーラーを定義することが可能です。
'mailgun' => [ 'transport' => 'mailgun', // 'client' => [ // 'timeout' => 5, // ]
Laravel は、プライマリ電子メール サービスがダウンした場合に備えてそれらを使用しようとします。
メール可能ファイルは、アプリケーションによって送信される電子メールを表す PHP クラスです。 Artisan make コマンドを使用して、新しいメール可能クラスを作成できます。
php artisan make:mail OrderConfirmation
メール可能ファイルの構成は、エンベロープ、コンテンツ、添付ファイルという 3 つの主要なメソッドを通じて行われ、それぞれヘッダー、メッセージの本文、および添付ファイルの定義を処理します。
use Illuminate\Bus\Queueable; use Illuminate\Mail\Mailables\Address; use Illuminate\Mail\Mailables\Attachment; use Illuminate\Mail\Mailables\Content; use Illuminate\Mail\Mailables\Envelope; use Illuminate\Mail\Mailable; use Illuminate\Queue\SerializesModels; class OrderConfirmation extends Mailable { use Queueable; use SerializesModels; public function __construct(public Order $order) {} /** * Configure the email message */ public function envelope() { return new Envelope( from: new Address('[email protected]', 'E-commerce'), subject: 'Order Confirmation', ); } /** * Generate the body */ public function content() { return new Content( markdown: 'emails.orders.confirm', ); } /** * Configure the email attachements */ public function attachments() { $code = $this->order->code; return [ Attachment::fromPath("/path/to/order-{$code}.pdf"), ]; } }
電子メールのコンテンツのレンダリングは、明らかに、適切な Blade テンプレートに委託されます。 Blade ビュー内では、mailable クラスで定義されたパブリック プロパティ (上記の例では $order) を使用して、電子メールのレンダリングに使用されるデータを取得できます。
Code: {{ $order->code }} Address: {{ $order->address }} ...
実際の電子メールの送信は、Mail ファサードとその to メソッドと send メソッドを介して行われます。
class OrderController extends Controller { public function ship(Order $order) { // do stuff with the order // Send the confirmation email Mail::to($order->user)->send(new OrderConfirmation($order)); } }
電子メール受信者は、電子メール アドレス文字列として、または名前と電子メール プロパティを持つ User オブジェクトまたはオブジェクトのコレクションを介して渡すことができます。
送信される実際の電子メールは、コンテンツに関連付けられた Blade テンプレートをレンダリングするために必要なプロパティを受け取るメール可能オブジェクトによって表されます。
メール ファサードは、受信者 (cc および bcc メソッド) と送信の時間および方法 (キュー以降) の両方に関して、送信構成をより詳細に定義できるさまざまなチェーン可能なメソッドを提供します。
独自のファサードを作成する方法を学びたい場合は、以下の記事を読むことができます:
https://inspector.dev/how-to-extend-laravel-with-driver-based-services/
電子メールの送信には外部サービス (メーラー ドライバー) の使用が必要なため、操作が遅くなり、ユーザー エクスペリエンスに悪影響を及ぼす可能性があります。
Laravel では、電子メールメッセージをバックグラウンド送信用にキューに入れることができます。 Laravel キュー システムを大規模に使用する方法のチュートリアルに興味がある場合は、以下の記事を読むことができます:
https://inspector.dev/what-worked-for-me-using-laravel-queues-from-the-basics-to-horizon/
バックグラウンドで電子メールの送信を延期するには、ShouldQueue インターフェイスまたは Mail ファサードの queue メソッドの 2 つのオプションがあります。
前のスニペットに示されているように、メール可能クラスは、Queueable などのいくつかの特性がデフォルトで付加されて生成されます。
実装に触れることなく、プログラムでメール ファサードのキュー メソッドを使用できるようになります:
Mail::to($user)->queue(new OrderConfirmation($order));
別の方法として、Mailable クラスで ShouldQueue インターフェイスの実装を宣言することもできます:
use Illuminate\Contracts\Queue\ShouldQueue; class OrderConfirmation extends Mailable implements ShouldQueue { ... }
このインターフェイスを使用する場合、メール ファサードで標準の送信メソッドを呼び出した場合でも、電子メールの送信は常にキューに入れられます。
// If the mailable class implements ShouldQueue these methods has the same behaviour. Mail::to($user)->send(new OrderConfirmation($order)); Mail::to($user)->queue(new OrderConfirmation($order));
電子メール メッセージに関連するビューを実装する場合、Blade ビューがレンダリングする最終結果を視覚的にフィードバックできると非常に役立ちます。これは、Laravel プロジェクトの Router/mailable.php ファイルを使用して行うことができます。
/* * Render email in the browser. * * Visit https://homestead.test/mailable */ Route::get('/', function () { return new \App\Domains\Organization\Mails\IngestionLimitMail( \App\Domains\Organization\Models\Organization::firstOrFail() ); });
ルートから有効な Mailable インスタンスを返すことができ、Laravel はブラウザーにビューをレンダリングします。通常の Web ページを開発するのと似ています。
最後に、
でこのルートの利用可能性を制限することを忘れないでください。
ルートサービスプロバイダー:
class RouteServiceProvider extends ServiceProvider { /** * Define your route model bindings, pattern filters, etc. * * @return void */ public function boot() { if (app()->environment('local')) { $this->mapMailableRoutes(); } } /** * Render mailables in the browser. * * @return void */ protected function mapMailableRoutes() { Route::prefix('mailable') ->group(base_path('routes/mailable.php')); } }
さらに技術的な記事については、Linkedin または X でフォローしてください。
Inspector は、ソフトウェア開発者向けに特別に設計されたコード実行監視ツールです。サーバーレベルで何もインストールする必要はありません。Laravel パッケージをインストールするだけで準備完了です。
HTTP モニタリング、データベース クエリの洞察、アラートや通知を好みのメッセージング環境に転送する機能をお探しの場合は、Inspector を無料でお試しください。アカウントを登録してください。
または、Web サイトで詳細をご覧ください: https://inspector.dev
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3