- vừa được xem lúc

Send mail trong Laravel sử dụng MailHog

0 0 200

Người đăng: Nguyễn Khánh

Theo Viblo Asia

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é.

composer create-project laravel/laravel mail-app cd mail-app php artisan serve

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

php artisan make:controller MailController

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.

Route::get('/mail', [MailController::class, 'index']); Route::post('/mail', [MailController::class, 'sendMail'])->name('send_mail');

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.

FROM mailhog/mailhog LABEL maintainer="Mahmoud Zalt <_@.com>" CMD ["Mailhog"] EXPOSE 1025 8025

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

docker build .
docker run -d -p 1025:1025 -p 8025:8025 mailhog/mailhog

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

MAIL_MAILER=smtp
MAIL_HOST=127.0.0.1
MAIL_PORT=1025
MAIL_USERNAME=null
MAIL_PASSWORD=null
MAIL_ENCRYPTION=null
_@.com
MAIL_FROM_NAME="${APP_NAME}"

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

php artisan make:mail SendMail

Ở trong function build các bạn có thể setting cho email như from, view, with, attach, ... Ở đ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 thì ở trong view mới có thể nhận được nha)

class SendMail extends Mailable
{ use Queueable, SerializesModels; public $data; /** * Create a new message instance. * * @return void */ public function __construct($data) { $this->data = $data; } /** * Build the message. * * @return $this */ public function build() { return $this->subject('Send mail contact!') ->markdown('Mails.send_mail'); }
}

Ở 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.

@component('mail::message')
# Hello {{ $data['email'] }} {{ $data['content'] }} Thanks<br>
@endcomponent

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 emailcontent nhé

class MailController extends Controller
{ public function sendMail(Request $request) { Mail::to($request->email) ->send(new SendMail($request->only(['email', 'content']))); $request->session()->flash('message', 'Send mail was successful!'); return view('Mails.index'); }
}

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.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tìm hiểu về Resource Controller trong Laravel

Giới thiệu. Trong laravel, việc sử dụng các route post, get, group để gọi đến 1 action của Controller đã là quá quen đối với các bạn sử dụng framework này.

0 0 358

- vừa được xem lúc

Phân quyền đơn giản với package Laravel permission

Như các bạn đã biết, phân quyền trong một ứng dụng là một phần không thể thiếu trong việc phát triển phần mềm, dù đó là ứng dụng web hay là mobile. Vậy nên, hôm nay mình sẽ giới thiệu một package có thể giúp các bạn phân quyền nhanh và đơn giản trong một website được viết bằng PHP với framework là L

0 0 449

- vừa được xem lúc

Sử dụng Swagger để xây dựng API documentation

Giới thiệu về Swagger. RESTful API là một tiêu chuẩn dùng trong việc thiết kế API cho các ứng dụng web (thiết kế Web services) để tiện cho việc quản lý các resource.

0 0 1k

- vừa được xem lúc

Ví dụ CRUD với Laravel và Vuejs.

1. Cài đặt Laravel. composer create-project --prefer-dist laravel/laravel vuelaravelcrud. .

0 0 160

- vừa được xem lúc

Một số tips khi dùng laravel (Part 1)

1. Show database query in raw SQL format. DB::enableQueryLog(); // Bật tính năng query logging. DB::table('users')->get(); // Chạy truy vấn bạn muốn ghi log.

0 0 84

- vừa được xem lúc

Inertiajs - Xây dựng Single Page App không cần API

Tiêu đề là mình lấy từ trang chủ của https://inertiajs.com/ chứ không phải mình tự nghĩ ra đâu nhé :v. Lâu lâu rồi chưa động tới Laravel (dự án cuối cùng mình code là ở ver 5.8), thế nên một ngày đẹp trời lượn vào đọc docs ver 8.

0 0 242