Tin tức

[Laravel practice] Config gửi mail test với Gmail

  • 08/08/2023

Sau đây sẽ là một hướng dẫn ngắn gọn để có thể sử dụng Gmail như một dịch vụ để gửi email test trong dự án.
Cụ thể ở đây sẽ sử dụng địa chỉ email test được cung cấp cho mỗi dự án.
Trong các bài tiếp theo mình sẽ viết về sử dụng Mailtrap hoặc 1 số dịch vụ khác phù hợp hơn với việc test mail:

Một số điều cần lưu ý:

  • Setting này chỉ áp dụng để test trong giai đoạn phát triển
  • Do giới hạn của domain vietis.com.vn nên địa chỉ email nhận cũng sẽ phải cùng mail domain

Chuẩn bị:

  • Địa chỉ email test được cung cấp trong dự án
  • Project Laravel chạy Https (SSL local)

Gmail config

Enable Less Secure App

Bước 1: truy cập trang Manage Your Google Account

Bước 2: truy cập mục Security

Bước 3: truy cập mục Less Secure App Access

Bước 4: enable Allow less secure apps

Sửa đoạn config sau trong file .env

Laravel config

Lưu ý cần điền chính xác, không thừa thiếu dấu cách, dấu ngoặc kép

MAIL_MAILER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587MAIL_USERNAME=email_address@vietis.com.vn
MAIL_PASSWORD=password
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="email_address@vietis.com.vn"
MAIL_FROM_NAME="${APP_NAME}"

Code send mail

Tạo mailable

Chạy câu lệnh tạo mailable class:

php artisan make:mail SendInvoiceToAdmin

Sau khi chạy sẽ được class như sau:

<?php

namespace App\Mail;

use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Queue\SerializesModels;
use Illuminate\Mail\Mailables\Envelope;

class SendInvoiceToAdmin extends Mailable
{    
      use Queueable, SerializesModels;

    /**
     * Create a new message instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

    /**
     * Get the message content definition.
     *
     * @return \Illuminate\Mail\Mailables\Content
     */
    public function content()
    {
        return new Content(
            view: 'emails.invoice.admin',
            with: [

            ],
        );
    }

    public function envelope(): Envelope
    {
        return new Envelope(
            subject: "Test subject",
        );
    }
}

những điểm cần lưu ý trong class mới tạo:

  • view: 'emails.invoice.admin': đây là đường dẫn tới blade template chứa content trong email được gửi
  • envelope: function để setting các thông tin như địa chỉ gửi, subject email

Send mail

Gọi hàm sau ở controller:

// $emails: list emails to send (type array)
Mail::to($emails)->send(new SendInvoiceToAdmin());

Test mail ở tinker

Mail::raw('Hello World!', function($msg) {$msg->to('manh.nguyenthe@vietis.com.vn')->subject('Test Email'); });