ایمیل (Mail)
تنظیمات
لاراول یک API ساده و خوش ساخت برپایه کتابخانه معروف SwiftMailer ارائه می نماید. فایل تنظیمات ایمیل config/mail.php
است، و گزینه هایی برای تنظیم میزبان SMTP، پورت، و اطلاعات دسترسی و همینطور یک متغیر عمومی from
برای تمامی ایمیل های فرستاده شده توسط این کتابخانه در خود دارد. شما میتوانید از هر سرور SMTP که بخواهید استفاده کنید. اگر میخواهید از تابع mail
در PHP برای فرستادن ایمیل استفاده کنید، باید مقدار متغیر driver
درفایل تنظیمات را به mail
تغییر دهید. یک درایور sendmail
هم برای استفاده وجود دارد.
درایورهای API
لاراول همچنین درایورهایی برای APIهای HTTP با نامهای Mailgun و Mandrill ارائه می دهد. این APIها اغلب از سرورهای SMTP ساده تر و سریعتر هستند. هردوی این درایورها برای کار نیاز به نصب یک کتابخانه HTTP با نام Guzzle 5 دارند. با افزودن خط زیر به فایل composer.json
میتوانید کتابخانه Guzzle 5 را به پروژه خود بیافزایید:
"guzzlehttp/guzzle": "~5.0"
درایور Mailgun
برای استفاده از درایور Mailgun در فایل تنظیمات config/mail.php
مقدار متغیر driver
را با mailgun
مقداردهی کنید. در قدم بعد اگر فایل تنظیمات config/services.php
وجود ندارد آن را ایجاد کنید. از وجود متغیرهای زیر در آن مطمئن شوید:
'mailgun' => [
'domain' => 'your-mailgun-domain',
'secret' => 'your-mailgun-key',
],
درایور Mandrill
برای استفاده از درایور Mandrill در فایل تنظیمات config/mail.php
مقدار متغیر driver
را با mandrill
مقداردهی کنید. در قدم بعد اگر فایل تنظیمات config/services.php
وجود ندارد آن را ایجاد کنید. از وجود متغیرهای زیر در آن مطمئن شوید:
'mandrill' => [
'secret' => 'your-mandrill-key',
],
درایور لاگ
اگر مقدار متغیر driver
در فایل تنظیمات config/mail.php
با log
مقداردهی شده باشد، تمامی ایمیل ها در فایلهای لاگ نوشته خواهند شد، و به هیچ یک از مخاطبین فرستاده نمی شوند. این کار برای عیب یابی و بررسی محتوای محلی و سریع مناسب است.
کاربرد ابتدایی
متد Mail::send
میتواند برای فرستادن ایمیل استفاده شود:
Mail::send('emails.welcome', ['key' => 'value'], function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
آرگومان اول فرستاده شده به متد send
نام view استفاده شده به عنوان بدنه ایمیل است. آرگومان دوم داده ای است که باید به view فرستاده شود، و اغلب به عنوان یک آرایه ارائه می شود. داده ها از طریق متغیر $key
در view قابل دسترس خواهند بود. آرگومان سوم کلوژری است که به شما امکان مشخص کردن گزینه های مختلف در مورد پیام ایمیل را میدهد.
نکته: همیشه یک متغیر
$message
به view مربوط به ایمیل فرستاده می شود و امکان افزودن پیوست در محل را به وجود می آورد. بنابراین بهتر است از فرستادن متغیرmessage
خودداری کنید.
همینطور میتوانید علاوه بر view در قالب HTML، از view با متن ساده استفاده کنید:
Mail::send(['html.view', 'text.view'], $data, $callback);
یا میتوانید با استفاده از کلیدهای html
یا text
تنها یک نوع view مشخص نمایید:
Mail::send(['text' => 'view'], $data, $callback);
میتوانید گزینه های دیگری مانند رونوشت، یا پیوست هم برای ایمیل خود مشخص نمایید:
Mail::send('emails.welcome', $data, function($message)
{
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com')->cc('bar@example.com');
$message->attach($pathToFile);
});
هنگامی که فایلی را به پیام پیوست میکنید، میتوانید نوع MIME و/یا نام نمایش داده شده را هم مشخص نمایید:
$message->attach($pathToFile, ['as' => $display, 'mime' => $mime]);
اگر میخواهید به جای یک ایمیل کامل یک string ساده بفرستید، میتوانید از متد raw
استفاده کنید:
Mail::raw('Text to e-mail', function($message)
{
$message->from('us@example.com', 'Laravel');
$message->to('foo@example.com')->cc('bar@example.com');
});
نکته: نمونه پیام فرستاده شده به کلوژر
Mail::send
کلاس SwiftMailer را اکستند میکند. این موضوع امکان فراخوانی هر متدی بر روی آن کلاس برای ساخت پیام ایمیلتان ایجاد میکند.
پیوست درمحل - Inline Attachment
پیوست عکسها به بدنه ایمیلها کار دشواری است؛ هرچند، لاراول روشی ساده برای پیوست تصویر به ایمیل و بازیابی CID مناسب ارائه مینماید.
قراردادن تصویر در View مربوط به ایمیل
<body>
Here is an image:
<img src="<?php echo $message->embed($pathToFile); ?>">
</body>
قراردادن داده خام در View ایمیل
<body>
Here is an image from raw data:
<img src="<?php echo $message->embedData($data, $name); ?>">
</body>
توجه داشته باشید که متغیر $message
همیشه با استفاده از فاساد Mail
به view مربوط به ایمیل فرستاده می شود.
صف بندی ایمیلها
قراردادن یک ایمیل در صف
از آنجاکه فرستادن ایمیل میتواند به شدت زمان پاسخ نرم افزار شما را افزایش دهد، بسیاری از برنامه نویسان ترجیح میدهند ایمیلها را برای اینکه در زمان مناسب و پشت صحنه فرستاده شوند، در صف قرار دهند. لاراول این کار را با استفاده از API یکتای صف ساده میکند. برای قراردادن ایمیل در صف، به سادگی متد queue
از فاساد Mail
را استفاده کنید:
Mail::queue('emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
همچنین میتوانید با استفاده از متد later
مدت زمانی که میخواهید فرستادن ایمیل را به تاخیر بیندازید مشخص کنید:
Mail::later(5, 'emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
اگر میخواهید یک صف مشخص را برای افزودن پیام مشخص کنید، میتوانید از متدهای queueOn
و laterOn
استفاده کنید:
Mail::queueOn('queue-name', 'emails.welcome', $data, function($message)
{
$message->to('foo@example.com', 'John Smith')->subject('Welcome!');
});
Mail و توسعه محلی
هنگامی که در حال توسعه نرم افزاری با امکان ارسال ایمیل هستید، غیرفعال کردن فرستادن ایمیل از ماشین محلی شما میتواند مفید باشد. برای انجام این کار، میتوانید متد Mail::pretend
را استفاده کنید یا مقدار گزینه pretend
را در فایل config/mail.php
را با true
مقداردهی کنید. هنگامی که فرستنده ایمیل در حالت pretend
باشد، پیام به جای فرستاده شدن در فایلهای لاگ نرم افزار نوشته میشود.
اگر میخواهید واقعا ایملیهای تستی را ببینید، از سرویسی مانند Mailtrap استفاده کنید.