Chào các bạn, mình là Hảo, Web developer đang làm việc tại công ty OneTech Asia. Các dự án gần đây mình tham gia có phần Sendmail trong Laravel sử dụng dịch vụ SES của Amazon mà mình thấy khá hay và muốn chia sẻ với các bạn. Hãy cùng tìm hiểu nhé:
1. Dịch vụ SES là gì?
SES (Simple Email Service) là một dịch vụ gửi mail được Amazon cung cấp, nhằm tiết kiệm chi phí, linh hoạt và dễ dàng thay đổi quy mô, cho phép nhà phát triển gửi email từ bên trong ứng dụng bất kỳ.

Các ưu điểm khi sử dụng dịch vụ SES:
- Gửi mail số lượng lớn phù hợp với nhu cầu của doanh nghiệp.
- Tốc độ gửi mail nhanh, server phân bố rộng trên toàn cầu.
- Tiết kiêm chi phí (1$/1000 email).
- Dễ dàng mở rộng quy mô.
- Dễ dàng kết hợp với các dịch vụ khác trong hệ sinh thái Amazon như: Cloudwatch, Simple Notification Service (SNS).
2. Gửi mail với Laravel và SES
Cấu hình trên AWS-SES
Trước tiên, bạn cần có tài khoản AWS để có thể sử dụng dịch vụ SES. Trong phạm vi bài này tôi không đề cập cách tạo tài khoản, các bạn có thể tham khảo thêm tại:
- https://beginaws.awsstudygroup.com/vi/1-account-setup/1-create-new-aws-account/
- https://cuongquach.com/aws-dang-ky-tai-khoan-aws-free-tier-mien-phi.html
Khi đã có tài khoản hãy đăng nhập vào dashboard quản trị của Amazon tại đây.

Tiếp theo hãy chọn phân vùng phù hợp.

Lưu ý: hiện tại SES chỉ được Amazon cung cấp ở 3 phân vùng: N.Virginia , Oregon và Ireland. Ở các phân vùng khác không sử dụng được.
Tiếp tục nhé, bạn cần tạo một SMTP Credential
- Hãy vào SES Services => Account dashboard => Create SMTP credentials

Sau đó bạn sẽ được chuyển đến màn hình tạo IAM, nhiệm vụ lúc này chỉ cần click vào nút create trên màn hình để tạo IAM thôi.

Khi đó, bạn sẽ được cấp SMTP Username và SMTP Password, hãy lưu lại hai thông tin này để có thể dùng trong ứng dụng của bạn nhé! Nhấn “Download Credentials” cho chắc luôn nha, vì chỉ cấp một lần thôi đấy!

Hãy quay lại màn hình dashboard để lấy thêm thông tin host nhé!
- Hãy vào SES Services => Account dashboard

Như vậy là đã đủ thông tin cho ứng dụng của bạn kết nối vào rồi đấy!
Mà khoan, có một lưu ý bạn cần biết: mặc định khi bạn tạo SES của bạn sẽ nằm trong Sandbox, tức là bạn không thể gửi mail ra bên ngoài cho bất kỳ email nào, điều này SES muốn bạn trong quá trình develop không bị gửi nhầm cho một email nào đó, khá hay đúng không? Vậy làm sao để gửi được mail?
Có 2 cách để bạn có thể gửi được mail:
+ Cách 1: Yêu cầu AWS mở Sandbox cho bạn, điều này bạn cần request cũng như nêu lý do để Amazon đồng ý mở Sandbox cho bạn. Tất nhiên điều này chỉ khi nào release ứng dụng của bạn thì mới phải làm cách này.
+ Cách 2: Thêm email/domain vào để xác nhận với Amazon, email/domain đó là của tôi và tôi muốn gửi đến nó.
Cách thêm email như sau:
- Hãy vào SES Services => Verified Identities => Create Identity

Ở đây tôi đã verify nhiều email, nếu bạn chưa verify thì nội dung trong bảng sẽ không có nhé!
Tiếp thôi, bạn hãy chọn Email address, nhập thông tin email và nhấn Create Identity

Khi đó, một email gửi đến hộp mail để xác nhận email trên. Nếu bạn quay lại màn hình Verified Identities sẽ thấy email của bạn đang ở trạng thái Verification pending.

Lúc này khi mở mail bạn sẽ thấy một mail từ Amazon.

Hãy mở mail và click vào link đính kèm trong nội dung để xác nhận nhé!

Khi xác nhận thành công, bạn sẽ nhận được màn hình này.

Nếu bạn quay lại màn hình Verified Identities sẽ thấy email của bạn đang ở trạng thái Verified.

Như vậy đã thêm mail vào được rồi, lúc này bạn có thể gửi mail cho người này bất cứ lúc nào. Tuy nhiên lưu ý mỗi ngày bạn sẽ có 200 email miễn phí để gửi test thôi nhé, khi nào mở Sandbox thì giới hạn sẽ là 50.000 emails/ ngày.
Tiếp theo là gì nhỉ? Chắc chắn là test xem gửi email đến email đó được chưa đúng không?
Click checkbox mail và chọn Send test email nhé!

Bạn sẽ được chuyển sang màn hình input sendmail:
- Chọn Formatted
- Scenario hãy chọn Custom
- Custom recipient hãy nhập email đã verify. Vì ở đây chỉ có 1 email được verify nên khi gửi mail là email sẽ tự gửi cho chính email đó.
- Nhập subject và body tùy ý để test sendmail
- Cuối cùng nhấn nút Send test email

Bạn sẽ nhận được màn hình trông như thế này:

Hãy vào hộp mail, bạn đã nhận được mail rồi đúng không? Easy nhỉ?

Cấu hình sendmail và gửi email trong Laravel
Ở bước trên bạn đã có host, username, password và email verify. Hãy thay thế vào code bên dưới, sau đó bỏ vào file .env nhé! (from_name đặt tùy bạn nhé)
