- 08/08/2023
[Laravel practice] Config gửi mail test với Gmail
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ửienvelope
: 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'); });