Laravel – Gửi email

Laravel dùng thư viện “SwiftMailer” phổ biến và hoàn toàn miễn phí để gửi mail. Templates mail được load tương tự như View, tức là bạn có thể sử dụng cấu trúc của Blade templates. Cấu trúc của hàm send();

Cấu trúc void send(string|array $view, array $data, Closure|string $callback)
Tham số $view(string|array) :Tên View chứa nội dung mail.

$data(array) : Mảng nội dung truyền vào view

$callback : Cấu hình thông tin gửi mail như subject, cc…

Chức năng Gửi Email

Tham số thứ 3, $callback nhận message instance và từ instance này chúng ta có thể gọi đến các funtion để cấu hình thông tin gửi mail. Ví dụ như:

$message->subject('Welcome to the Tutorials Point');
$message->from('email@example.com', 'Mr. Example');
$message->to('email@example.com', 'Mr. Example');

Và một số phương thức ít dùng hơn:

$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);

Để đính kèm file ta dùng:

$message->attach('path/to/attachment.txt');
$message->embed('path/to/attachment.jpg');

Mail có thể được gửi dạng HTML hay text. Mặc định sẽ gửi dưới dạng HTML, nếu bạn muốn chuyển sang dạng text có thể dùng mảng trong tham số đầu tiên.

Mail::send(['text=>'text.view'], $data, $callback);

Ví dụ

Chúng ta sẽ gửi mail bằng tài khoản gmail. Trước tiên cấu hình trong file .env. Và tài khoản gmail của bạn phải cho phép gửi mail từ ứng dụng (Hoặc là bật bảo mật 2 lớp và tạo mật khẩu cho ứng dụng).

Step 1 : Cấu hình file .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

Step 2 : Tạo controller MailController bằng lệnh command bên dưới.

php artisan make:controller MailController

Step 3 : Thêm code như sau vào controller mới tạo.

app/Http/Controllers/MailController.php

<?php

namespace App\Http\Controllers;

use Mail;
use Illuminate\Http\Request;

class MailController extends Controller
{
    public function basic_email(){
        $data = array('name'=>"Virat Gandhi");
     
        Mail::send(['text'=>'mail'], $data, function($message) {
           $message->to('abc@gmail.com', 'Tutorials Point')->subject
              ('Laravel Basic Testing Mail');
           $message->from('xyz@gmail.com','Virat Gandhi');
        });
        echo "Basic Email Sent. Check your inbox.";
    }
  
    public function html_email(){
        $data = array('name'=>"Virat Gandhi");
        Mail::send('mail', $data, function($message) {
           $message->to('abc@gmail.com', 'Tutorials Point')->subject
              ('Laravel HTML Testing Mail');
           $message->from('xyz@gmail.com','Virat Gandhi');
        });
        echo "HTML Email Sent. Check your inbox.";
    }
     
    public function attachment_email(){
        $data = array('name'=>"Virat Gandhi");
        Mail::send('mail', $data, function($message) {
           $message->to('abc@gmail.com', 'Tutorials Point')->subject
              ('Laravel Testing Mail with Attachment');
           $message->attach('C:\xampp\htdocs\laravel\public\uploads\image.png');
           $message->attach('C:\xampp\htdocs\laravel\public\uploads\test.txt');
           $message->from('xyz@gmail.com','Virat Gandhi');
        });
        echo "Email Sent with attachment. Check your inbox.";
    }
}

Step 4 : Tạo view cho mail mail.blade.php. Thêm code như dưới.

resources/views/mail.blade.php

<h1>Hi, {{ $name }}</h1>
<p>Sending Mail from Laravel.</p>

Step 5 : Thêm code sau vào routes/web.php

Route::get('sendbasicemail','MailController@basic_email');
Route::get('sendhtmlemail','MailController@html_email');
Route::get('sendattachmentemail','MailController@attachment_email');

Step 6 : Vào http://localhost:8000/sendbasicemail để test gửi mail text.

Bạn kiểm tra hộp thư đến hay các mail đã gửi để kiểm tra lại.

Step 7 : Vào http://localhost:8000/sendhtmlemail để gửi mail HTML.

Step 8 : Vào http://localhost:8000/sendattachmentemail để gửi mail đính kèm file.

Chú ý : Trong file MailController.php, địa chỉ email trong from() là địa chỉ gửi email, thường dùng chung với địa chỉ email đã cấu hình trong .env.