Hướng dẫn tính năng gửi mail trong Laravel qua mini project

Tram Ho

Xin chào mọi người, sau một thời gian vắng bóng thì mình đã tiếp tục quay trở lại rồi đây. Nhân dịp mình đang làm project ở trường và trong đó có chức năng gửi email nên trong bài viết này mình sẽ hướng dẫn các bạn tạo chức năng gửi mail bằng ứng dụng Laravel.


Ý tưởng của mình sẽ tạo ra một mini project với các chức năng cơ bản. Với mỗi chức năng chúng ta sẽ gửi email cho người dùng về thông tin của hành động đó.

1. Tạo project Laravel

Để thực hiện được chức năng cơ bản thì điều bắt buộc với chúng ta là phải có một project laravel đúng không nào? =))
Ở đây mình dùng lệnh laravel để tạo project.

2. Migration

Sau khi khởi tạo project thành công, chúng ta sẽ tạo một bảng tasks trong CSDL (Cơ sở dữ liệu ) bằng cách sử dụng migration

Sau khi tạo migration, chúng ta sẽ có được một file migration như thế này. Việc của chúng ta là giờ thêm những cột muốn thêm vào function up() như dưới đây:

Ở đây mình chỉ cần cột id và name cho bảng này là được rồi.

3. Model

Tương tự với model, sau khi chạy câu lệnh trên thì cũng sẽ xuất hiện file như dưới đây.

Các thuộc tính không cần thiết thì mình sẽ không viết vào đi vì trong trường hợp này đối với mình chỉ cần fillable là đủ rồi ?

4. Routing

Trước khi tạo được route thì chúng ta phải tạo controller trước.

Sau khi có controller rồi thì việc tiếp theo của chúng ta là khởi tạo route thôi nhỉ ?

5. Tạo function CRUD

Tới bước này, mình sẽ chia ra làm 2 phần đó là:

  • Tạo Functions
  • Tạo Views
Functions

Chúng ta có một TaskController gồm các functions như sau:

View

Chúng ta sẽ tạo ra 2 view. Đó là app.blade.php để chứa bố cục của giao diện và tasks.blade.php chứa bảng dữ liệu và form thêm mới.

Khi đó, giao diện hoàn chỉnh mà chúng ta nhận được sẽ là:

Interface hơi ngu mong mọi người bỏ qua =)))

6. Gửi Email

Giờ đây sẽ đến chức năng chính của chúng ta đó là gửi email.

B1. Config file .env

Do mình sử dụng Gmail để gửi nên mình sẽ config theo Gmail. Các bạn tìm đến phần có nội dung và sửa lại như dưới đây:

Khi sử dụng Gmail thì:

  • MAIL_DRIVER (phương thức gửi mail) là smtp.
  • MAIL_HOST (host) của Gmail là smtp.gmail.com.
  • MAIL_PORT (cổng kết nối đến Gmail) là 587.
  • MAIL_USERNAME là chính gmail của bạn.
  • MAIL_PASSWORD là mật khẩu gmail của bạn.

Khi sử dụng password bạn cần chú ý một vài điều:

Nếu Gmail của bạn bật bảo mật 2 lớp (Two-factor Authentication) thì bạn cần tạo ra mật khẩu ứng dụng 1 lần của gmail để có thể sử dụng được, bạn có nhập mật khẩu của gmail thì cũng không thể dùng được trong trường hợp này. Mình không khuyến khích các bạn bỏ lớp bảo mật nâng cao này đi. (Ở cuối bài mình sẽ hướng dẫn các bạn cách để lấy mật khẩu ứng dụng của gmail)

Vậy là đã xong bước config.

B2. Xử lí

Mình sẽ gửi Email cho trường hợp khi tạo mới hoặc xóa một task.

B2.1. Tạo job

Đầu tiên mình sẽ tạo ra một job sử dụng để nhận công việc mỗi khi trong controller chuẩn bị đi đến bước return kết quả. Cụ thể ở đây là job gửi email:

Sau khi chạy lệnh trên thì mình sẽ có một file đó là app/Jobs/SendEmail.php

Ở trong file này sẽ nhận nhiệm vụ nhận thông tin bao gồm $message và $users
trong đó $messagelà tin nhắn và $users là loạt những người dùng mà sẽ gửi từ controller. Tiếp theo là thực hiện công việc gửi email cho người dùng với nội dung của email sẽ được nhận lại khi gọi Notification.

B2.2. Tạo Mailable

B2.3. Tạo template cho mail

Mình sẽ sử dụng một file blade.php để tạo giao diện cho email mình sẽ gửi

Mọi người tự customize lại template này hoặc có thể dùng luôn của mình như ở đây cũng được =)))

B2.4. Nhận data từ Controller

function store() của Controller mình sẽ sửa lại như sau:

Ở đây mình thêm hai biến là $users$message mục đích để lấy ra tất cả user trong CSDL và tạo ra message cho hành động, sau đó sẽ gửi truyền cả hai vào trong job SendEmail để thực hiện gửi mail.
Tương tự với function delete() cũng như vậy

B3. Chạy project

Công việc đã xong xuôi rồi giờ chúng ta hãy cùng nhau chạy chương trình 1 lượt nha.

Và đây là thành quả của mình.

Hướng dẫn lấy mật khẩu ứng dụng của Gmail

Như ở trên mình đã nói, nếu bạn sử dụng bảo mật 2 lớp của Gmail thì cần phải có mật khẩu ứng dụng thì mới có thể sử dụng được chức năng gửi email này. Nên sau đây mình sẽ hướng dẫn các bạn lấy mật khẩu ứng dụng của gmail.

Đầu tiên, các bạn truy cập vào trang quản lí tài khoản của Google tại đây. Sau khi truy cập và đăng nhập bạn sẽ thấy màn hình sau:

Ở cột bên trái, các bạn chọn Bảo mật.

Tại đây, bạn có thể thấy phần Đăng nhập vào Google có phần Xác minh 2 bước đang bật, tức là tài khoản của bạn đang được bảo vệ với lớp bảo mật nâng cao.

Tiếp đến bạn chọn Mật khẩu ứng dụng, khi này Google sẽ yêu cầu bạn nhập lại mật khẩu một lần nữa. Sau khi nhập lại mật khẩu thì bạn sẽ thấy màn hình này.

Giờ bạn sẽ chọn Ứng dụngThiết bị, sau đó ấn Tạo.

Sau khi Tạo thì bạn sẽ nhận được một chuỗi gồm 16 kí tự, đó là mật khẩu ứng dụng của bạn. Bạn dùng mật khẩu này để dán vào phần MAIL_PASSWORD trong project trên.

Tổng kết

Vậy là đã hoàn thành, mình vừa hướng dẫn các bạn thực hiện chức năng gửi email thông qua việc sử dụng Job, Mailable của Laravel với một project nho nhỏ. Câu cú mình còn hơi lủng củng nên mong các bạn bỏ qua. =)))
Nếu các bạn thành công đừng tiếc cho mình xin 1 upvote nha ? (kamsamita)

Tài liệu tham khảo: https://laravel.com/docs/6.x/mail

Chúc các bạn thành công !
Chia sẻ bài viết ngay

Nguồn bài viết : Viblo