Series Laravel Email & Mailtrap #1: Cấu hình SMTP Fake và Phát súng đầu tiên
1. Đăng ký và Lấy cấu hình từ Mailtrap
Đầu tiên, bạn cần một nơi để hứng email.
- Truy cập vào Mailtrap.io và đăng ký một tài khoản miễn phí.
- Tại màn hình Dashboard, vào mục Email Testing ➔ Inboxes ➔ Chọn My Inbox.
- Bấm vào nút Show Credentials (Hiển thị cấu hình).
- Tại phần Integrations, bạn bấm vào menu thả xuống và chọn Laravel (7+). Mailtrap sẽ tự động tạo sẵn cho bạn một đoạn mã cấu hình .env cực kỳ tiện lợi.
2. Gắn cấu hình vào dự án Laravel
Bây giờ, hãy mở file .env nằm ở thư mục gốc của dự án Laravel. Tìm đến các dòng bắt đầu bằng chữ MAIL_ và thay thế chúng bằng đoạn cấu hình bạn vừa copy từ Mailtrap.
Nó sẽ trông giống như thế này:
MAIL_MAILER=smtp
MAIL_HOST=sandbox.smtp.mailtrap.io
MAIL_PORT=2525
MAIL_USERNAME=your_username_here # Nhập username từ Mailtrap
MAIL_PASSWORD=your_password_here # Nhập password từ Mailtrap
MAIL_ENCRYPTION=tls
MAIL_FROM_ADDRESS="hello@example.com"
MAIL_FROM_NAME="${APP_NAME}"
Lưu ý: Sau khi sửa file .env, nếu bạn đang chạy server, hãy khởi động lại nó, hoặc chạy lệnh php artisan config:clear để Laravel nhận cấu hình mới.
3. Tạo một Lớp Mailable (Khuôn đúc Email)
Laravel cung cấp một tính năng cực mạnh gọi là Mailable. Mỗi một loại email (như Welcome, Reset Password) sẽ được gói gọn vào một Class riêng biệt.
Mở Terminal và gõ lệnh sau để tạo một email chào mừng:
php artisan make:mail WelcomeEmail
Lệnh này sẽ sinh ra một file mới tại app/Mail/WelcomeEmail.php. Hãy mở nó ra và thiết lập cơ bản:
namespace App\Mail;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Mail\Mailables\Content;
use Illuminate\Mail\Mailables\Envelope;
use Illuminate\Queue\SerializesModels;
class WelcomeEmail extends Mailable
{
use Queueable, SerializesModels;
/**
* Cấu hình Tiêu đề (Subject) của Email
*/
public function envelope(): Envelope
{
return new Envelope(
subject: 'Chào mừng bạn đến với hệ thống!',
);
}
/**
* Chỉ định View (Giao diện) của Email
*/
public function content(): Content
{
return new Content(
// Ta sẽ tạo file blade này ở bước sau
view: 'emails.welcome',
);
}
}
4. Tạo giao diện (View) cho Email
Email không chỉ là text khô khan, nó được viết bằng HTML/CSS. Dựa vào khai báo ở trên, hãy tạo một file tên là welcome.blade.php nằm trong thư mục resources/views/emails/.
<!DOCTYPE html>
<html>
<head>
<title>Chào mừng</title>
</head>
<body>
<h1>Xin chào!</h1>
<p>Cảm ơn bạn đã đăng ký tài khoản. Đây là email test đầu tiên được gửi từ hệ thống Laravel của chúng ta.</p>
<p>Chúc bạn một ngày tốt lành!</p>
</body>
</html>
5. Gắn cò và Bắn Email (Test qua Route)
Mọi thứ đã chuẩn bị xong: Cấu hình SMTP đã chốt, Class Email đã có, Giao diện đã sẵn sàng. Giờ là lúc bóp cò.
Để test nhanh, chúng ta không cần viết Controller phức tạp. Mở file routes/web.php và tạo một route tạm thời như sau:
use Illuminate\Support\Facades\Route;
use Illuminate\Support\Facades\Mail;
use App\Mail\WelcomeEmail;
Route::get('/test-email', function () {
// Chỉ định địa chỉ nhận và gọi hàm send()
Mail::to('khachhang_test@gmail.com')->send(new WelcomeEmail());
return 'Email đã được đưa vào nòng và bắn đi!';
});
6. Tận hưởng thành quả
Bây giờ, hãy mở trình duyệt và truy cập vào đường dẫn: http://localhost:8000/test-email (hoặc domain local của bạn).
Nếu màn hình báo "Email đã được đưa vào nòng và bắn đi!", hãy lập tức quay lại trang Dashboard của Mailtrap. Bạn sẽ thấy email vừa gửi xuất hiện ngay lập tức trong hộp thư ảo, hiển thị đầy đủ HTML, tiêu đề, và cả chấm điểm spam (Spam Analysis) mà không hề có một email thật nào bị lọt ra ngoài!
All rights reserved