07/09/2018, 10:34

Hướng dẫn thiết lập Mailgun để gửi email trong Laravel

Laravel framework hỗ trợ nhiều cách khách nhau để gửi email như gửi email sử dụng thư viện SMTP, thông qua API của các nhà cung cấp dịch vụ email (email provider) như Mailgun, SparkPost, Amazon SES hoặc bạn có thể sử dụng hàm mail() hoặc sendmail() có sẵn trong PHP. Trong phần lớn các trường hợp ...

Laravel framework hỗ trợ nhiều cách khách nhau để gửi email như gửi email sử dụng thư viện SMTP, thông qua API của các nhà cung cấp dịch vụ email (email provider) như Mailgun, SparkPost, Amazon SES hoặc bạn có thể sử dụng hàm mail() hoặc sendmail() có sẵn trong PHP. Trong phần lớn các trường hợp thì chúng ta nên chọn sử dụng dịch vụ của email provider. Điều này sẽ giúp đảm bảo tính tin cậy của email gửi đi tránh email không bị rơi vào spam filer hoặc thậm chí bị reject bởi email của người nhận đồng thời giảm đáng kể thời gian khi phải duy trì và phát triển một hệ thống email server riêng.

Điều tuyệt vời khi sử dụng Mailgun đó là chúng ta được hỗ trợ gửi 10,000 email/tháng hoàn toàn miễn phí. Với các ứng dụng web không quá đồ sộ thì giới hạn số lượng email gửi ở trên là khá lớn để có thể sử dụng hết. Ở bài viết này tôi sẽ hướng dẫn các bạn cách thiết lập Mailgun để gửi email trong Laravel.

Đăng Ký Tài Khoản và Thêm Domain Trên Mailgun

Để bắt đầu thực hành gửi email sử dụng Mailgun API thì trước tiên bạn cần truy cập vào website của Mailgun và đăng ký một tài khoản. Ngay sau khi đăng ký tài khoản bạn đã có thể sử dụng tên miền Sandbox để gửi email thông qua API của Mailgun. Bạn có thể tìm thấy tên miền này trong tab Domains trên giao diện web sau khi đăng nhập vào tài khoản của mình:

Sandbox domain cung cấp bởi Mailgun

Tuy nhiên để hạn chế spam khi test gửi email bạn cần thêm email của người nhận dùng để test ở mục Authorized Recipients. Sau khi thêm vào thì các email này sẽ nhận được mail xác nhận lại và chỉ khi các email này xác nhận đồng ý thì bạn mới có thể bắt đầu gửi email cho họ.

Nếu muốn gửi email bằng domain và server thực thì bạn cần thêm domain vào và xác nhận thông qua việc thêm hoặc thay đổi giá trị của một số record trong thiết lập quản lý tên miền DNS hay Domain Name Setting. Bạn có thể tìm thấy hướng dẫn về các record cần thay đổi giá trị trong DNS của tên miền được thêm vào ở mục Domain Verification & DNS.

Cài Đặt Guzzle Dependency

Laravel framework đã tích hợp sẵn bộ thư viện của PHP dùng để gửi email dựa trên Mailgun API tuy nhiên thư viện này phụ thuộc vào Guzzle client do đó chúng ta cần cài đặt dependency này.

Trên cửa sổ termial bạn di chuyển tới thư mục của dự án Laravel và chạy câu lệnh sau:

$ cd $PROJECT_PATH ### thay $PROJECT_PATH bằng địa chỉ thư mục dự án
$ composer require guzzlehttp/guzzle

Thiết Lập Domain và Secret Key

Đầu tiên bạn cần cấu hình Larvel để sử dụng mail driver nào (hay thư viện PHP nào) để gửi email. Trong tập tin config/mail.php bạn tìm tới tuỳ chọn driver và thay đổi giá trị của trường này là mailgun.

Sau đó bạn cần cấu hình cho domain và secret key. Trong tập tin config/services.php bạn tìm tới tuỳ chọn của mailgun và cập nhật 2 giá trị domain và secret được cung cấp bởi Mailgun:

...
    'mailgun' => [
        'domain' => ',
        'secret' => ',
    ],
...

Thay đổi giá trị của hai trường domain và secrete ở trên bằng tên miền sandbox và secret key tương ứng.

Thiết Lập Thông Tin Người Gửi Mặc Định

Mỗi khi gửi email bạn sẽ cần thiết lập thông tin của người gửi. Các thông tin này bao gồm địa chỉ email người gửi và tên người gửi. Đối với nhiều ứng dụng thì tác vụ gửi email thường được diễn ra ở nhiều nơi khác nhau trong source code và sử dụng cùng một thông tin người người ví dụ như admin@codehub.vn với tên Codehub.vn. Trường hợp này bạn có thể thiết lập thông tin người gửi mặc định để Laravel sử dụng nếu như không có thông tin người gửi nào được đưa vào. Để làm điều này bạn tìm tới tập tin config/mail.php và thay đổi giá trị của trường from:

...
    'from' => ['address' => 'example@example.com', 'name' => 'App Name'],
...

Kết thúc bước trên thì bây giờ bạn đã có thể sẵn sàng gửi email sử dụng API của Laravel và thông qua dịch vụ email cung cấp bởi Mailgun.

0