ایمیل
- معرفی
- تولید Mailables
- نوشتن Mailables
- Markdown Mailables
- ارسال نامه
- ارائه Mailables
- بومی سازی Mailables
- ایمیل و توسعه محلی
- مناسبت ها
معرفی
لاراول یک 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', ],];