نسخه:

ایمیل

معرفی

لاراول یک API تمیز و ساده را بر روی کتابخانه محبوب SwiftMailer با درایورهایی برای SMTP، Mailgun، Postmark، Amazon SES و . sendmail به شما امکان می دهد به سرعت ارسال نامه را از طریق یک سرویس محلی یا مبتنی بر ابر انتخابی خود شروع کنید.

پیکربندی

سرویس های ایمیل لاراول ممکن است از طریق mail فایل پیکربندی پیکربندی شوند. هر ایمیلی که در این فایل پیکربندی شده است ممکن است گزینه های خاص خود را داشته باشد و حتی "حمل و نقل" منحصر به فرد خود را داشته باشد که به برنامه شما امکان می دهد از خدمات ایمیل مختلف برای ارسال پیام های ایمیل خاص استفاده کند. به عنوان مثال، برنامه شما ممکن است از Postmark برای ارسال نامه تراکنشی استفاده کند در حالی که از Amazon SES برای ارسال نامه انبوه استفاده می کند.

پیش نیاز راننده

درایورهای مبتنی بر API مانند Mailgun و Postmark اغلب ساده‌تر و سریع‌تر از سرورهای SMTP هستند. در صورت امکان، باید از یکی از این درایورها استفاده کنید. همه درایورهای API به کتابخانه Guzzle HTTP نیاز دارند که ممکن است از طریق مدیر بسته Composer نصب شود:

composer require guzzlehttp/guzzle

درایور تفنگ پستی

برای استفاده از درایور Mailgun، ابتدا Guzzle را نصب کنید، سپس گزینه موجود در فایل پیکربندی default خود را روی . در مرحله بعد، بررسی کنید که فایل پیکربندی شما حاوی گزینه های زیر باشد: config/mail.php mailgun config/services.php

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

اگر از منطقه Mailgun "US" استفاده نمی کنید ، می توانید نقطه پایانی منطقه خود را در services فایل پیکربندی تعریف کنید:

'mailgun' => [
'domain' => 'your-mailgun-domain',
'secret' => 'your-mailgun-key',
'endpoint' => 'api.eu.mailgun.net',
],

درایور علامت پست

برای استفاده از درایور Postmark، انتقال SwiftMailer Postmark را از طریق Composer نصب کنید:

composer require wildbit/swiftmailer-postmark

سپس، Guzzle را نصب کنید و گزینه موجود در فایل پیکربندی default خود را روی . در نهایت، بررسی کنید که فایل پیکربندی شما حاوی گزینه های زیر باشد: config/mail.php postmark config/services.php

'postmark' => [
'token' => 'your-postmark-token',
],

درایور SES

برای استفاده از درایور Amazon SES ابتدا باید Amazon AWS SDK برای PHP را نصب کنید. می توانید این کتابخانه را با افزودن خط زیر به بخش composer.json فایل خود require و اجرای composer update دستور نصب کنید:

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

در مرحله بعد، گزینه موجود در فایل پیکربندی default خود را روی آن تنظیم کنید و بررسی کنید که فایل پیکربندی شما حاوی گزینه های زیر باشد: config/mail.php ses config/services.php

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

اگر هنگام اجرای درخواست SES نیاز به اضافه کردن گزینه های اضافی دارید SendRawEmail ، می توانید یک options آرایه در ses پیکربندی خود تعریف کنید:

'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',
],
],
],
],

تولید Mailables

در لاراول، هر نوع ایمیلی که توسط اپلیکیشن شما ارسال می شود، به عنوان یک کلاس "mailable" نمایش داده می شود. این کلاس ها در app/Mail دایرکتوری ذخیره می شوند. اگر این دایرکتوری را در برنامه خود نمی بینید نگران نباشید، زیرا زمانی که اولین کلاس پستی خود را با استفاده از دستور ایجاد می کنید برای شما ایجاد می شود make:mail :

php artisan make:mail OrderShipped

نوشتن Mailables

تمام پیکربندی یک کلاس mailable در build متد انجام می شود. در این روش، می‌توانید با روش‌های مختلفی مانند from ،،، و برای پیکربندی نمایش و تحویل ایمیل تماس بگیرید. subject view attach

پیکربندی فرستنده

استفاده از from روش

ابتدا اجازه دهید پیکربندی فرستنده ایمیل را بررسی کنیم. یا به عبارت دیگر، ایمیل قرار است "از طرف" چه کسی باشد. دو راه برای پیکربندی فرستنده وجود دارد. ابتدا، می توانید از from متد در متد کلاس mailable خود استفاده کنید build :

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from('example@example.com')
->view('emails.orders.shipped');
}

from استفاده از یک آدرس جهانی

با این حال، اگر برنامه شما از همان آدرس «از» برای همه ایمیل‌های خود استفاده کند، فراخوانی روش from در هر کلاس پستی که ایجاد می‌کنید، می‌تواند دشوار شود. در عوض، می‌توانید یک آدرس جهانی «از» را در config/mail.php فایل پیکربندی خود مشخص کنید. این آدرس در صورتی استفاده خواهد شد که هیچ آدرس دیگری از "from" در کلاس mailable مشخص نشده باشد:

'from' => ['address' => 'example@example.com', 'name' => 'App Name'],

علاوه بر این، می توانید یک آدرس جهانی "reply_to" را در config/mail.php فایل پیکربندی خود تعریف کنید:

'reply_to' => ['address' => 'example@example.com', 'name' => 'App Name'],

پیکربندی نمای

در یک متد کلاس mailable build ، می‌توانید از این view روش برای تعیین الگوی مورد استفاده در هنگام رندر کردن محتوای ایمیل استفاده کنید. از آنجایی که هر ایمیل معمولاً از یک الگوی Blade برای ارائه محتوای خود استفاده می کند، هنگام ساخت HTML ایمیل خود از قدرت و راحتی موتور قالب Blade برخوردار هستید:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped');
}

ممکن است بخواهید یک resources/views/emails دایرکتوری ایجاد کنید تا همه الگوهای ایمیل خود را در خود جای دهد. با این حال، شما آزاد هستید که آنها را در هر کجا که می خواهید در resources/views فهرست خود قرار دهید.

ایمیل های متن ساده

اگر می خواهید یک نسخه متنی ایمیل خود را تعریف کنید، می توانید از این text روش استفاده کنید. مانند view روش، این text روش یک نام الگو را می پذیرد که برای ارائه محتوای ایمیل استفاده می شود. شما آزاد هستید که هم نسخه HTML و هم متن ساده پیام خود را تعریف کنید:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->text('emails.orders.shipped_plain');
}

مشاهده داده ها

از طریق املاک عمومی

به طور معمول، شما می خواهید برخی از داده ها را به نمای خود ارسال کنید که می توانید هنگام رندر HTML ایمیل از آنها استفاده کنید. دو راه وجود دارد که می‌توانید داده‌ها را در دسترس خود قرار دهید. ابتدا، هر ویژگی عمومی تعریف شده در کلاس mailable شما به طور خودکار در دسترس view قرار می گیرد. بنابراین، برای مثال، می‌توانید داده‌ها را به سازنده کلاس mailable خود ارسال کنید و آن داده‌ها را روی ویژگی‌های عمومی تعریف شده در کلاس تنظیم کنید:

<?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;
 
/**
* The order instance.
*
* @var Order
*/
public $order;
 
/**
* Create a new message instance.
*
* @param \App\Order $order
* @return void
*/
public function __construct(Order $order)
{
$this->order = $order;
}
 
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped');
}
}

هنگامی که داده ها روی یک ویژگی عمومی تنظیم شدند، به طور خودکار در دید شما در دسترس خواهند بود، بنابراین می توانید مانند سایر داده های موجود در قالب های Blade به آن دسترسی داشته باشید:

<div>
Price: {{ $order->price }}
</div>

از طریق with روش:

اگر می‌خواهید فرمت داده‌های ایمیل خود را قبل از ارسال به الگو سفارشی کنید، می‌توانید به صورت دستی داده‌های خود را از طریق روش به نمایش ارسال کنید with . به طور معمول، شما همچنان داده ها را از طریق سازنده کلاس mailable ارسال می کنید. با این حال، باید این داده ها را روی 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;
 
/**
* The order instance.
*
* @var Order
*/
protected $order;
 
/**
* Create a new message instance.
*
* @param \App\Order $order
* @return void
*/
public function __construct(Order $order)
{
$this->order = $order;
}
 
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->with([
'orderName' => $this->order->name,
'orderPrice' => $this->order->price,
]);
}
}

هنگامی که داده ها به روش منتقل شدند with ، به طور خودکار در دید شما در دسترس خواهند بود، بنابراین می توانید مانند سایر داده های موجود در قالب های Blade به آن دسترسی داشته باشید:

<div>
Price: {{ $orderPrice }}
</div>

پیوست ها

برای افزودن پیوست به ایمیل، از attach متد موجود در متد mailable class استفاده کنید build . متد attach مسیر کامل فایل را به عنوان اولین آرگومان خود می پذیرد:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->attach('/path/to/file');
}

هنگام پیوست کردن فایل‌ها به پیام، می‌توانید نام نمایشی و/یا نوع MIME را با ارسال یک array آرگومان دوم به attach روش مشخص کنید:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->attach('/path/to/file', [
'as' => 'name.pdf',
'mime' => 'application/pdf',
]);
}

پیوست کردن فایل ها از دیسک

اگر فایلی را روی یکی از دیسک های سیستم فایل خود ذخیره کرده اید ، می توانید آن را با استفاده از attachFromStorage روش زیر به ایمیل پیوست کنید:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->attachFromStorage('/path/to/file');
}

در صورت لزوم، می‌توانید نام پیوست فایل و گزینه‌های اضافی را با استفاده از آرگومان‌های دوم و سوم متد مشخص کنید attachFromStorage :

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->attachFromStorage('/path/to/file', 'name.pdf', [
'mime' => 'application/pdf'
]);
}

attachFromStorageDisk اگر نیاز به تعیین دیسک ذخیره سازی غیر از دیسک پیش فرض خود داشته باشید، ممکن است از این روش استفاده شود:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->attachFromStorageDisk('s3', '/path/to/file');
}

پیوست های داده های خام

این attachData روش ممکن است برای پیوست کردن یک رشته خام از بایت ها به عنوان پیوست استفاده شود. به عنوان مثال، اگر PDF در حافظه ایجاد کرده اید و می خواهید آن را بدون نوشتن روی دیسک به ایمیل پیوست کنید، ممکن است از این روش استفاده کنید. متد attachData بایت های داده خام را به عنوان آرگومان اول، نام فایل را به عنوان آرگومان دوم و آرایه ای از گزینه ها را به عنوان آرگومان سوم می پذیرد:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->view('emails.orders.shipped')
->attachData($this->pdf, 'name.pdf', [
'mime' => 'application/pdf',
]);
}

پیوست های درون خطی

تعبیه تصاویر درون خطی در ایمیل‌های شما معمولاً دشوار است. با این حال، لاراول یک راه راحت برای پیوست کردن تصاویر به ایمیل های شما و بازیابی CID مناسب ارائه می دهد. برای جاسازی یک تصویر درون خطی، از embed روش روی $message متغیر درون قالب ایمیل خود استفاده کنید. لاراول به طور خودکار $message متغیر را در دسترس همه قالب های ایمیل شما قرار می دهد، بنابراین نیازی نیست نگران ارسال دستی آن باشید:

<body>
Here is an image:
 
<img src="{{ $message->embed($pathToImage) }}">
</body>

$message متغیر در پیام های متنی ساده در دسترس نیست زیرا پیام های متنی ساده از پیوست های درون خطی استفاده نمی کنند.

تعبیه پیوست های داده خام

اگر از قبل یک رشته داده خام دارید که می خواهید در قالب ایمیل جاسازی کنید، می توانید از embedData روش روی $message متغیر استفاده کنید:

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

سفارشی کردن پیام SwiftMailer

متد withSwiftMessage کلاس Mailable پایه به شما اجازه می دهد تا یک تماس برگشتی ثبت کنید که قبل از ارسال پیام با نمونه خام SwiftMailer فراخوانی می شود. این به شما فرصتی می دهد تا پیام را قبل از تحویل سفارشی کنید:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
$this->view('emails.orders.shipped');
 
$this->withSwiftMessage(function ($message) {
$message->getHeaders()
->addTextHeader('Custom-Header', 'HeaderValue');
});
}

Markdown Mailables

پیام‌های پستی Markdown به شما این امکان را می‌دهند که از الگوهای از پیش ساخته شده و مؤلفه‌های اعلان‌های ایمیل در فایل‌های پستی خود استفاده کنید. از آنجایی که پیام‌ها در Markdown نوشته می‌شوند، لاراول می‌تواند قالب‌های زیبا و پاسخ‌گوی HTML را برای پیام‌ها ارائه کند و در عین حال به‌طور خودکار یک متن ساده نیز تولید کند.

ایجاد Markdown Mailables

برای ایجاد پستی با یک الگوی Markdown مربوطه، می توانید --markdown از گزینه make:mail دستور Artisan استفاده کنید:

php artisan make:mail OrderShipped --markdown=emails.orders.shipped

سپس، هنگام پیکربندی mailable در build متد آن، markdown متد را به جای view متد فراخوانی کنید. این markdown روش نام الگوی Markdown و یک آرایه اختیاری از داده‌ها را برای در دسترس قرار دادن الگو می‌پذیرد:

/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->from('example@example.com')
->markdown('emails.orders.shipped');
}

نوشتن پیام های علامت گذاری

پست‌های Markdown از ترکیبی از اجزای Blade و نحو Markdown استفاده می‌کنند که به شما امکان می‌دهد به راحتی پیام‌های ایمیل بسازید در حالی که از اجزای از پیش ساخته شده لاراول استفاده می‌کنید:

@component('mail::message')
# Order Shipped
 
Your order has been shipped!
 
@component('mail::button', ['url' => $url])
View Order
@endcomponent
 
Thanks,<br>
{{ config('app.name') }}
@endcomponent

هنگام نوشتن ایمیل های Markdown از تورفتگی بیش از حد استفاده نکنید. تجزیه کننده های Markdown محتوای تورفتگی را به عنوان بلوک های کد ارائه می کنند.

جزء دکمه

جزء دکمه یک پیوند دکمه مرکزی را ارائه می دهد. مؤلفه دو آرگومان a url و اختیاری را می پذیرد color . رنگ های پشتیبانی شده عبارتند از primary , success , و error . شما می توانید به تعداد دلخواه اجزای دکمه را به پیام اضافه کنید:

@component('mail::button', ['url' => $url, 'color' => 'success'])
View Order
@endcomponent

جزء پنل

مؤلفه پانل بلوک متن داده شده را در پانلی ارائه می دهد که رنگ پس زمینه کمی متفاوت از بقیه پیام دارد. این به شما امکان می دهد توجه را به یک بلوک متن معین جلب کنید:

@component('mail::panel')
This is the panel content.
@endcomponent

جزء جدول

جزء جدول به شما امکان می دهد یک جدول Markdown را به یک جدول HTML تبدیل کنید. کامپوننت جدول Markdown را به عنوان محتوای خود می پذیرد. تراز ستون جدول با استفاده از نحو پیش فرض تراز جدول Markdown پشتیبانی می شود:

@component('mail::table')
| Laravel | Table | Example |
| ------------- |:-------------:| --------:|
| Col 2 is | Centered | $10 |
| Col 3 is | Right-Aligned | $20 |
@endcomponent

سفارشی سازی کامپوننت ها

شما می توانید تمام اجزای ایمیل Markdown را برای سفارشی سازی به برنامه شخصی خود صادر کنید. برای صادرات کامپوننت ها، از vendor:publish دستور Artisan برای انتشار laravel-mail تگ دارایی استفاده کنید:

php artisan vendor:publish --tag=laravel-mail

این دستور اجزای ایمیل Markdown را در resources/views/vendor/mail دایرکتوری منتشر می کند. دایرکتوری mail شامل یک دایرکتوری html و یک text دایرکتوری خواهد بود که هر کدام شامل نمایش های مربوط به هر جزء موجود می باشد. شما آزاد هستید که این اجزا را هر طور که دوست دارید سفارشی کنید.

سفارشی کردن CSS

پس از صادرات اجزاء، resources/views/vendor/mail/html/themes دایرکتوری حاوی یک default.css فایل خواهد بود. می‌توانید CSS را در این فایل سفارشی کنید و سبک‌های شما به‌طور خودکار در نمایش‌های HTML پیام‌های ایمیل Markdown شما قرار می‌گیرد.

اگر می‌خواهید یک موضوع کاملاً جدید برای اجزای Markdown لاراول بسازید، می‌توانید یک فایل CSS را در html/themes دایرکتوری قرار دهید. پس از نامگذاری و ذخیره فایل CSS، theme گزینه mail فایل پیکربندی را به روز کنید تا با نام تم جدید شما مطابقت داشته باشد.

برای سفارشی کردن تم برای هر پستی، می توانید $theme ویژگی کلاس mailable را به نام موضوعی که باید هنگام ارسال آن پستی استفاده شود، تنظیم کنید.

ارسال نامه

برای ارسال پیام از روش نما to استفاده کنید . این روش یک آدرس ایمیل، یک نمونه کاربر یا مجموعه ای از کاربران را می پذیرد. اگر یک شی یا مجموعه ای از اشیاء را ارسال کنید، پست کننده به طور خودکار از ویژگی ها و ویژگی های آنها هنگام تنظیم گیرندگان ایمیل استفاده می کند، بنابراین مطمئن شوید که این ویژگی ها در اشیاء شما موجود است. هنگامی که گیرندگان خود را مشخص کردید، می توانید نمونه ای از کلاس mailable خود را به متد ارسال کنید: Mail to email name send

<?php
 
namespace App\Http\Controllers;
 
use App\Http\Controllers\Controller;
use App\Mail\OrderShipped;
use App\Order;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
 
class OrderController extends Controller
{
/**
* Ship the given order.
*
* @param Request $request
* @param int $orderId
* @return Response
*/
public function ship(Request $request, $orderId)
{
$order = Order::findOrFail($orderId);
 
// Ship order...
 
Mail::to($request->user())->send(new OrderShipped($order));
}
}

شما فقط محدود به تعیین گیرندگان "to" در هنگام ارسال پیام نیستید. شما آزاد هستید که گیرندگان "to"، "cc" و "bcc" را در یک فراخوانی متد زنجیره ای واحد تنظیم کنید:

use Illuminate\Support\Facades\Mail;
 
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->send(new OrderShipped($order));

حلقه روی گیرندگان

گاهی اوقات، ممکن است لازم باشد با تکرار روی آرایه‌ای از گیرندگان/آدرس‌های ایمیل، یک پست قابل ارسال به فهرستی از گیرندگان ارسال کنید. از آنجایی که این to روش آدرس‌های ایمیل را به لیست گیرندگان پست‌پذیر اضافه می‌کند، همیشه باید نمونه پست‌پذیر را برای هر گیرنده دوباره ایجاد کنید:

foreach (['taylor@example.com', 'dries@example.com'] as $recipient) {
Mail::to($recipient)->send(new OrderShipped($order));
}

ارسال نامه از طریق یک میلر خاص

به طور پیش فرض، لاراول از ایمیلی که به عنوان ایمیل پیکربندی شده در فایل پیکربندی default شما استفاده می کند. mail با این حال، می توانید از این mailer روش برای ارسال پیام با استفاده از یک پیکربندی ایمیل خاص استفاده کنید:

Mail::mailer('postmark')
->to($request->user())
->send(new OrderShipped($order));

نامه در صف

در صف یک پیام ایمیل

از آنجایی که ارسال پیام های ایمیل می تواند زمان پاسخگویی برنامه شما را به شدت افزایش دهد، بسیاری از توسعه دهندگان انتخاب می کنند که پیام های ایمیل را برای ارسال پس زمینه در صف قرار دهند. لاراول با استفاده از API صف یکپارچه داخلی خود این کار را آسان می کند . برای صف بندی یک پیام ایمیل، پس از مشخص کردن گیرندگان پیام، از queue روش روی نما استفاده کنید: Mail

Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->queue(new OrderShipped($order));

این روش به طور خودکار از فشار دادن یک کار در صف مراقبت می کند تا پیام در پس زمینه ارسال شود. قبل از استفاده از این ویژگی باید صف های خود را پیکربندی کنید .

صف پیام با تاخیر

اگر می خواهید تحویل یک پیام ایمیل در صف را به تاخیر بیندازید، می توانید از این later روش استفاده کنید. متد به عنوان اولین آرگومان خود، نمونه ای later را می پذیرد DateTime که نشان می دهد چه زمانی پیام باید ارسال شود:

$when = now()->addMinutes(10);
 
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->later($when, new OrderShipped($order));

فشار دادن به صف های خاص

از آنجایی که همه کلاس‌های ارسال‌پذیر تولید شده با استفاده از make:mail دستور از این ویژگی استفاده می‌کنند Illuminate\Bus\Queueable ، می‌توانید متدهای onQueue و onConnection را در هر نمونه کلاس پستی فراخوانی کنید، که به شما امکان می‌دهد اتصال و نام صف پیام را مشخص کنید:

$message = (new OrderShipped($order))
->onConnection('sqs')
->onQueue('emails');
 
Mail::to($request->user())
->cc($moreUsers)
->bcc($evenMoreUsers)
->queue($message);

صف به صورت پیش فرض

اگر کلاس‌های پستی دارید که می‌خواهید همیشه در صف باشند، می‌توانید ShouldQueue قرارداد را روی کلاس پیاده‌سازی کنید. اکنون، حتی اگر هنگام ارسال نامه، متد را فراخوانی کنید send ، mailable همچنان در صف قرار می گیرد زیرا قرارداد را اجرا می کند:

use Illuminate\Contracts\Queue\ShouldQueue;
 
class OrderShipped extends Mailable implements ShouldQueue
{
//
}

ارائه Mailables

گاهی اوقات ممکن است بخواهید محتوای HTML یک پستی را بدون ارسال آن ضبط کنید. برای انجام این کار، می توانید render روش mailable را فراخوانی کنید. این متد محتوای ارزیابی شده mailable را به عنوان یک رشته برمی گرداند:

$invoice = App\Invoice::find(1);
 
return (new App\Mail\InvoicePaid($invoice))->render();

پیش نمایش ایمیل ها در مرورگر

هنگام طراحی یک الگوی پستی، آسان است که به سرعت پیش نمایش پستی ارائه شده در مرورگر خود را مانند یک الگوی معمولی Blade مشاهده کنید. به همین دلیل، لاراول به شما این امکان را می دهد که هر پستی را مستقیماً از یک مسیر بسته یا کنترلر برگردانید. هنگامی که یک mailable برگردانده می شود، رندر می شود و در مرورگر نمایش داده می شود و به شما این امکان را می دهد که به سرعت طرح آن را بدون نیاز به ارسال آن به یک آدرس ایمیل واقعی پیش نمایش کنید:

Route::get('mailable', function () {
$invoice = App\Invoice::find(1);
 
return new App\Mail\InvoicePaid($invoice);
});

بومی سازی Mailables

لاراول به شما این امکان را می‌دهد که فایل‌های پستی را در محلی غیر از زبان فعلی ارسال کنید و حتی اگر نامه‌ها در صف قرار بگیرند، این منطقه را به خاطر می‌آورند.

برای انجام این کار، نما روشی را برای تنظیم زبان مورد نظر Mail ارائه می دهد . locale هنگامی که فایل پستی در حال قالب بندی است، برنامه به این منطقه تغییر می کند و پس از تکمیل قالب بندی، به محلی قبلی باز می گردد:

Mail::to($request->user())->locale('es')->send(
new OrderShipped($order)
);

لوکال های برگزیده کاربر

گاهی اوقات، برنامه ها محلی مورد نظر هر کاربر را ذخیره می کنند. با اجرای HasLocalePreference قرارداد بر روی یک یا چند مدل خود، می توانید به لاراول دستور دهید که از این محلی ذخیره شده هنگام ارسال نامه استفاده کند:

use Illuminate\Contracts\Translation\HasLocalePreference;
 
class User extends Model implements HasLocalePreference
{
/**
* Get the user's preferred locale.
*
* @return string
*/
public function preferredLocale()
{
return $this->locale;
}
}

هنگامی که رابط را پیاده سازی کردید، لاراول به طور خودکار از محلی ترجیحی هنگام ارسال پستی و اعلان ها به مدل استفاده می کند. locale بنابراین، هنگام استفاده از این رابط، نیازی به فراخوانی متد نیست :

Mail::to($request->user())->send(new OrderShipped($order));

ایمیل و توسعه محلی

هنگام توسعه برنامه‌ای که ایمیل ارسال می‌کند، احتمالاً نمی‌خواهید ایمیل‌هایی را به آدرس‌های ایمیل زنده ارسال کنید. لاراول چندین راه برای "غیرفعال کردن" ارسال واقعی ایمیل ها در طول توسعه محلی ارائه می دهد.

درایور لاگ

به جای ارسال ایمیل‌های شما، log درایور ایمیل تمام پیام‌های ایمیل را برای بررسی در فایل‌های گزارش شما می‌نویسد. برای اطلاعات بیشتر در مورد پیکربندی برنامه خود در هر محیط، اسناد پیکربندی را بررسی کنید .

جهانی به

راه حل دیگری که لاراول ارائه می کند، تنظیم یک گیرنده جهانی برای تمام ایمیل های ارسال شده توسط فریم ورک است. به این ترتیب، تمام ایمیل های تولید شده توسط برنامه شما به جای آدرسی که در هنگام ارسال پیام مشخص شده است، به یک آدرس خاص ارسال می شود. این را می توان از طریق گزینه موجود در فایل پیکربندی to خود انجام داد : config/mail.php

'to' => [
'address' => 'example@example.com',
'name' => 'Example'
],

تله پستی

در نهایت، می‌توانید از سرویسی مانند Mailtrap و smtp درایور برای ارسال پیام‌های ایمیل خود به یک صندوق پستی ساختگی استفاده کنید، جایی که می‌توانید آنها را در یک کلاینت ایمیل واقعی مشاهده کنید. این رویکرد این مزیت را دارد که به شما امکان می‌دهد ایمیل‌های نهایی را در نمایشگر پیام Mailtrap بررسی کنید.

مناسبت ها

لاراول در طول فرآیند ارسال پیام های ایمیلی دو رویداد را اجرا می کند. رویداد MessageSending قبل از ارسال پیام فعال می شود، در حالی که MessageSent رویداد پس از ارسال پیام فعال می شود. به یاد داشته باشید، این رویدادها هنگام ارسال نامه اجرا می شوند ، نه زمانی که در صف قرار می گیرند. می توانید یک شنونده رویداد برای این رویداد در سایت خود ثبت کنید EventServiceProvider :

/**
* The event listener mappings for the application.
*
* @var array
*/
protected $listen = [
'Illuminate\Mail\Events\MessageSending' => [
'App\Listeners\LogSendingMessage',
],
'Illuminate\Mail\Events\MessageSent' => [
'App\Listeners\LogSentMessage',
],
];