Send mail trong Laravel sử dụng MailHog

Tram Ho

Xin chào mọi người, khi phát triển một ứng dụng web thì các tác vụ gửi mail được sử dụng rất thường xuyên nên hôm nay, mình sẽ gửi đến mọi người cách để gửi mail trong Laravel sử dụng MailHog . Trong làm việc thực tế, sẽ có rất nhiều công cụ để dùng cho gửi mail như Mailtrap, MailHog,… nhưng mình đề xuất cho các bạn sử dụng MailHog, vì nó chỉ gửi ở dưới máy local nên sẽ tránh được 1 số vấn đề bảo mật sau này (lúc trước mình thường dùng Mailtrap vì nó khá tiện và đã bị các anh trong công ty nói)

Các bước thực hiện

Cài đặt ứng dụng Laravel

Ở bài viết này mình sẽ sử dụng Laravel 8 để thực hiện, đầu tiên chạy câu command quen thuộc để thực hiện cài đặt ứng dụng Laravel nhé.

Tạo route và giao diện

Trước khi tạo 1 route, thì các bạn thực hiện tạo 1 controller dùng cho việc gửi mail bằng command

Sau khi tạo xong controller thì chúng ta thêm 1 router mail và thực hiện làm 1 giao diện đơn giản cho việc gửi mail gồm 2 input là địa chỉ email người nhận vào nội dung muốn gửi.

Thực hiện gửi mail

1. Cài đặt MailHog

Để thực hiện gửi mail các bạn cần phải thực hiện cài đặt MailHog, các bạn có thể lên lên docs của nó để xem nhé https://github.com/mailhog/MailHog. Ở đây mình sẽ cài đặt bằng docker với Dockerfile như bên dưới.

Thực hiện build docker image và chạy ở port 1025 và 8025

2. Cấu hình MailHog trong .env

3. Thực hiện tạo một Mailable

Thực hiện command bên dưới để tạo 1 mailable, nó sẽ được lưu trong folder app/Mail

Ở trong function build các bạn có thể setting cho email như fromviewwithattach, … Ở đoạn code dưới đây mình thực hiện gửi mail có subject là “Send mail contact!” sử dụng markdown trong file resources/views/Mails/send_mail.blade.php và nhận data thông qua __construct và gán vào biến $this->data(nhớ để pubic file view có thể nhận được nha)

Ở file view thì mình sẽ tạo 1 thông tin đơn giản để hiển thị nội dung mail nhé. Biến $data chính là $this->data ở file mailable phía trên.

4. Thực hiện gửi mail ở controller

Sau khi người dùng nhập email và content rồi nhấn submit, chúng ta sẽ chuyển hướng đến function sendMail trong MailController, ở đây các bạn nhớ thêm validate required cho email và content nhé

Kết quả

Tổng kết

Việc gửi mail cần phải cẩn thận, có thể bị gửi mail nhầm cho end users, cho user toàn hệ thống, … vì vậy phải test lại cần thận khi thực hiên. Ngoài ra, việc gửi mail sẽ khiến cho ứng dụng load khá lâu, nên bạn nên sử dụng Queues cho việc gửi mail nhé. Cảm ơn mọi người đã theo dõi bài viết của mình.

Chia sẻ bài viết ngay