فهرست:

آشنایی با کتابخانه SwiftMailer

لاراول از كتابخانه حرفه ای SwiftMailer برای ارسال ایمیل استفاده می كند. با استفاده از این کتابخانه، می توانیم به راحتی در لاراول ایمیل ارسال کنید. در لاراول شما می توانید قالب ایمیل مورد نظر خود را به روال قبل در قسمت View پیاده سازی کرده و از موتور Blade بهرمند گردید. در این کتابخانه Syntax متد Send و آرگومان های دریافتی آن بصورت زیر است.

  • آرگومان $view که می تواند از نوع string|array باشد برای تعیین view مورد نظر برای قالب ایمیل می باشد.
  • آرگومان $data که نوع آن باید بصورت array باشد برای ارسال متغییر ها به view مورد نظر است.
  • آرگومان $callback به شما این امکان را می دهد که دریافت کنندگان ایمیل، موضوع ایمیل و سایر موارد مربوط به پیغام ایمیل خود را سفارشی سازی کنید.

void send(string|array $view, array $data, Closure|string $callback)
در آرگومان سوم $callback شما قادرید یک instance از $message را دریافت کرده و بصورت دلخواه آن را شخصی سازی نمایید بخ حالت های زیر دقت کنید.
$message->subject('Welcome to the Tutorials Point');
$message->from('email@example.com', 'Mr. Example');
$message->to('email@example.com', 'Mr. Example');

$message->sender('email@example.com', 'Mr. Example');
$message->returnPath('email@example.com');
$message->cc('email@example.com', 'Mr. Example');
$message->bcc('email@example.com', 'Mr. Example');
$message->replyTo('email@example.com', 'Mr. Example');
$message->priority(2);
همچنین برای ضمیمه کردن فایل به همراه ایمیل می توانید حالت های زیر را بکار برید.
$message->attach('path/to/attachment.txt');
$message->embed('path/to/attachment.jpg');
همچنین شما می توانید در اولین آرگومان تعیین کنید ایمیل مورد نظر شما به صورت HTML یا text ارسال شود، نوع پیش فرض ارسال بصورت HTML است. اگر می خواهید نامه بصورت متنی ساده ارسال شود بصورت زیر اقدام نمایید.
Mail::send(['text'=>'text.view'], $data, $callback);
در مثال بالا آرگومان اول بصورت array دریافت می شود و در آن حال ارسال ایمیل بصورت text تنظیم شده است.

مثال کاربردی برای ارسال ایمیل در لاراول

برای درک بهتر توضیحات بالا به ذکر یک مثال کاربردی می پردازیم برای این منظور ما قصد داریم از لاراول برای ارسال ایمیل از حساب کاربری Gmail استفاده نماییم، برای این منظور ابتدا تنظیمات زیر را در فایل .env انجام می دهیم.

.env
MAIL_DRIVER = smtp
MAIL_HOST = smtp.gmail.com
MAIL_PORT = 587
MAIL_USERNAME = your-gmail-username
MAIL_PASSWORD = your-application-specific-password
MAIL_ENCRYPTION = tls
پس از تغییر فایل .env دستور زیر را برای پاک کردن حافظه پنهان و راه اندازی مجدد سرور Laravel اجرا کنید.
php artisan config:cache
حال برای ایجاد کنترلر MailController از خط فرمان زیر استفاده کنید.
php artisan make:controller MailController --plain
بعد از اجرای دستور بالا فایل MailController.php ایجاد می شود آن را بصورت زیر تغییر دهید.
app/Http/Controllers/MailController.php
<?php

namespace App\Http\Controllers;
use Illuminate\Http\Request;
use Mail;

use App\Http\Requests;
use App\Http\Controllers\Controller;

class MailController extends Controller {
   public function basic_email() {
      $data = array('name'=>"Name Family");
   
      Mail::send(['text'=>'mail'], $data, function($message) {
         $message->to('abc@gmail.com', 'Your Subject')->subject
            ('Laravel Basic Testing Mail');
         $message->from('xyz@gmail.com','Sender name');
      });
      echo "Basic Email Sent. Check your inbox.";
   }
   public function html_email() {
      $data = array('name'=>"Name Family");
	   
      Mail::send('mail', $data, function($message) {
         $message->to('abc@gmail.com', 'Your Subject')->subject
            ('Laravel HTML Testing Mail');
         $message->from('xyz@gmail.com','Sender name');
      });
      echo "HTML Email Sent. Check your inbox.";
   }
   public function attachment_email() {
      $data = array('name'=>"Name Family");
	   
      Mail::send('mail', $data, function($message) {
         $message->to('abc@gmail.com', 'Your Subject')->subject
            ('Laravel Testing Mail with Attachment');
         $message->attach('C:\laravel-master\laravel\public\uploads\image.png');
         $message->attach('C:\laravel-master\laravel\public\uploads\test.txt');
         $message->from('xyz@gmail.com','Sender name');
      });
      echo "Email Sent with attachment. Check your inbox.";
   }
}
حال یک قالب ساده برای ایمیل مورد نظر خود در فایل mail.blade.php بصورت زیر بسازید.
resources/views/mail.blade.php
<h1>Hi, {{ $name }}</h1>
l<p>Sending Mail from Laravel.</p>
سپس فایل روت را بصورت زیر ویرایش نمایید.
app/Http/routes.php
Route::get('sendbasicemail','MailController@basic_email');
Route::get('sendhtmlemail','MailController@html_email');
Route::get('sendattachmentemail','MailController@attachment_email');
حال برای ارسال یک ایمیل ساده از آدرس زیر استفاده می کنیم و خروجی مرورگر ما باید بصورت زیر باشد.
http://localhost:8000/sendbasicemail
Basic Email Sent. Check your inbox.
برای ارسال یک ایمیل با فرمت HTML از آدرس زیر استفاده می کنیم و خروجی مرورگر ما باید بصورت زیر باشد.
http://localhost:8000/sendhtmlemail
HTML Email Sent. Check your inbox.
و برای ارسال یک ایمیل همراه با فایل ضمیمه از آدرس زیر استفاده می کنیم و خروجی مرورگر ما باید بصورت زیر باشد.
http://localhost:8000/sendattachmentemail
Email Sent with attachment. Check your inbox.