Advertisement
  1. Code
  2. Laravel 5

Làm Sao Để Gửi Email trong Laravel

by
Read Time:9 minsLanguages:

Vietnamese (Tiếng Việt) translation by Thai An (you can also view the original English article)

Trong bài này, chúng ta sẽ khám phá Mail API trong framework làm web Laravel. Laravel tận dụng lợi thư viện phổ biến SwiftMailer, điều này dễ dàng sử dụng và có nhiều email driver để chọn lựa. Ở những phần sau của bài viết, chúng ta sẽ đi vào chi tiết của một minh hoạ cho các khái niệm được thảo luận trong nửa phần đầu của bài viết.

Thiết lập những điều kiện ban đầu

Laravel triển khai một wrapper trên cùng của thư viện SwiftMailer để giúp việc quản lý email dễ dàng để cấu hình và sử dung cùng một lúc. Bạn có thể tìm thấy thiết lập mail mặc định ở config/mail.php.

Khi nói đến gửi mail, Laravel hỗ trợ nhiều driver khác để chọn lựa. Như bạn thấy, mặc định MAIL_DRIVER được xét thành smtp.

Nếu bạn dự định sử dụng driver smtp để gửi mail vậy bạn cũng cần phải thiết lập những cấu hình như MAIL_HOST, MAIL_PORT, MAIL_ENCRYPTION, MAIL_USERNAME, and MAIL_PASSWORD.

Mặt khác, nếu bạn dự tính sử dụng driver sendmail, vậy bạ n muốn bảo đảm rằng đường dẫn hệ thống sendmail được xét đúng giá trị trong file config/mail.php.

Bạn cũng có thể xét địa chỉ from sẽ được dùng khi gửi mail cho khoá from. Và sau cùng, nếu bạn muốn dùng cách tạo email theo định dạng Markdown, bạn có thể xét những cấu hình này qua khoá markdown.

Điểm tốt nhất là bạn thể sử dụng những nhà cung cấp dịch vụ email của bên thứ ba như Mailgun, Mandrill, SES, và SparkPost. Nếu bạn đang dùng một trong số những dịch vụ đó, bạn cần bảo đảm rằng bạ thiết lập những cấu hình tương ứng trong file config/services.

Vậy đó là giới thiệu sơ lược về các thiết lập có liên quan đến mail API trong Laravel. Từ phần tiếp theo trở đi, chúng tôi sẽ vào chi tiết một ví dụ trình bày cho bạn làm sao để gửi các email.

Xây dựng class Mailable

Trong phần này, chúng ta sẽ tạo ra class mailable, nó được dùng để gửi email. Class mailable đảm nhận trách nhiệm cho việc gửi email sử dụng một mailer, mailer này được cấu hình trong file config/mail.php. Trên thực tế, Laravel đã cung cấp một lệnh artisan cho phép chúng ta tạo một template cơ bản.

Nó tạo một template email mới hoàn toàn ở app/Mail/DemoEmail.php, như hiển thị trong đoạn code dưới đây:

Hãy thay nội dung của file đó với nội dung sau đây:

Có hai phương thức quan trọng trong class mailable được triển khai - __constructbuild. Phương thức __construct được dùng để khởi tạo đối tượng bạn sẽ dùng trong template email. Mặt khác, phương thức build được dùng để khởi tạo thêm các giá trị cụ thể của email như from, template cho view, attachments (file đính kèm) và các thứ tương tự.

Trong trường hợp của chúng ta, chúng ta đã truyền đối tượng $demo thành tham số của constructor, và gán thuộc tính public cho demo.

Trong phương thức build, chúng tôi đã khởi tạo cấu hình email đặc trưng.

  • From được sử dụng để xét địa chỉ email được sử dụng như địa chỉ from.
  • Sử dụng phương thức view, bạn có thể xét email template để sử dụng khi gửi email với mailable. Trong trường hợp của chúng ta, xét nó thành mails.demo, và có nghĩa là bạn cần phải tạo ra một file view template trong resources/views/mails/demo.blade.php.
  • Tiếp theo, phương thức text được dùng để thiết lập phiên bản chỉ chứa text của một email template.
  • Nhưng chúng tôi đã thảo luận, phương thức __construct được dùng để thiết lập các đối tượng sẽ được dùng trong email template, bạn có thể đồng thời dùng phương thức with cho phép bạn thiết lập dữ liệu của view cho một thông điệp.
  • Tiếp theo, chúng ta sử dụng phương thức attach để đính kèm một hình ảnh với một thông điệp,

Dĩ nhiên, chúng ta cần tạo những email template mà chúng ta cần để gửi email. Tiếp điến tạo một file resources/views/mails/demo.blade.php như hiển thị trong phần code bên dưới.

Đồng thời, hãy tạo một phiên bản chỉ chứa text của file đó ở resources/views/mails/demo_plain.blade.php.

Vậy đó là class mailable theo như ý của bạn, và chúng ta vẫn chưa xong khi cần sử dụng facade Mail để thực sự gửi email đi. Trong phấn tiếp theo, chúng ta sẽ khám phá cách bạn có thể dùng Facade Mail để gửi email sử dụng DemoEmail của class Mailable vừa được tạo ra trong phần này.

Kết thúc

Trong phần này, chúng ta sẽ tạo một ví dụ để minh hoạ cách bạn có thể dùng class Mailable đã được tạo ra trong phần trước.

Hãy tạo một controller ở app/Http/Controllers/MailController.php với nội dung bên dưới:

Chú ý rằng chúng tôi đã kèm thêm Facade Illuminate\Support\Facades\Mail sẽ được dùng để gửi email đi. Trong phương thức send, phần khai báo sau đây sẽ đảm nhận việc gửi email bằng cách khởi tạo App\Mail\DemoEmail Mailable ngay lúc đầu.

Phương thức to của Facade Illuminate\Support\Facades\Mail trả về một instance của class \Illuminate\Mail\PendingMail, nó đã chứa một mailer được cấu hình thích hợp trong file config/mail.php.

Và cuối cùng, chúng tôi dùng phương thức send của class \Illuminate\Mail\PendingMail để thực sự gửi đi một email.

Để kiểm tra, hãy thêm vào một route trong file routes/web.php.

Và với route đó, bạn có thể chạy URL http://your-laravel-site.com/mail/send để xem liệu nó có hoạt động như bạn mong đợi.

Ở mặt khác, nếu bạn muốn kiểm tra email template một cách nhanh chóng, mà không cần phải gửi những email thực sự, thì vẫn có một điều khoản trong Laravel cho phép bạn ghi nhật ký tất cả email gửi đi.

Để thực hiện điều đó, bạn cần phải xét giá trị của MAIL_DRIVER thành log trong file config/mail.php. Tiếp theo, bạn có thể chạy URL đã đề cập và xem xét file log để kiẻm tra xem liệu email template có được ghi nhật ký lại ở đó không.

Nếu mọi thứ ổn thoã, bạn sẽ thấy một email đang đã được ghi nhận lại trong file storage/logs/laravel.log.

Cho đến giờ vậy là khá nhiều về tính năng mail trong Laravel, cũng như là phần kết cho bài viết này.

Tổng kết

Hôm nay, chúng ta đã đi chi tiết vào mail API được xây dựng trong Laravel, và nó cũng hỗ trợ một số driver khác.

Bắt đầu với những khái niệm cơ bản, chúng ta đã triển khai class mailable, là một thành phần chủ chốt trong mail API của Laravel khi chúng ta đi tiếp. Cuối cùng, chúng ta đã kiếm tra class mailable bằng cách tạo ra một controller để xem nếu nó thực sự hoạt động.

Nếu bạn chỉ vừa khởi đầu với Laraval hoặc tìm kiếm để mở rộng kiến thức, trang web, hoặc ứng dụng của bạn với các phần mở rộng, chúng tôi có rất nhiều thứ bạn có thể học được trên Envato Market.

Tôi rất muốn nghe phản hồi từ bạn dưới dạng câu hỏi và bình luận bằng feed bên dưới!

Advertisement
Advertisement
Looking for something to help kick start your next project?
Envato Market has a range of items for sale to help get you started.