Có bao giờ bạn chỉ muốn gửi một email reset password từ localhost, nhưng hai tiếng sau vẫn đang đọc về SPF, DKIM, sandbox và reputation chưa?

Tôi gặp cảnh này nhiều hơn mức muốn thừa nhận. Lúc dev, nhu cầu ban đầu rất nhỏ: form chạy xong, mail hiện ra đâu đó để tôi kiểm tra link và HTML. Đến lúc đưa app lên môi trường thật, câu hỏi lập tức đổi thành: dùng provider nào để mail vào inbox, xem được bounce, không cháy ví và không phải chăm thêm một hệ thống phụ?

Tôi đang chạy production trên AWS SES, dùng MailerSend cho vài luồng cần dashboard dễ nhìn, và dùng Resend cho mấy app Next.js cần ship nhanh. Ba dịch vụ đều gửi được email, nhưng cảm giác vận hành khác hẳn nhau. SES cho tôi giá rất thấp đổi lại là nhiều việc thiết lập. MailerSend đứng ở giữa. Resend khiến phần gửi mail gần như biến mất khỏi đầu tôi khi đang code.

Vì vậy, đây không phải bảng xếp hạng xem logo nào đứng số một. Tôi sẽ so sánh các lựa chọn phổ biến, rồi chốt đúng một provider cho từng kiểu người dùng.

Đừng chọn provider theo logo, chọn theo cách bạn gửi

Trước tiên phải tách SMTP relay, REST API và SDK. SMTP relay là mẫu số chung: app cũ, WordPress, framework backend hay một con cron job đều có thể cắm host, port, username và password rồi chạy. Khi cần thử nhanh từ localhost, SMTP2GO rất tiện vì không bắt verify domain ngay và có các port thay thế nếu mạng chặn port quen thuộc.

REST API hợp với app hiện đại hơn. Request có cấu trúc rõ, lỗi dễ đọc, idempotency dễ kiểm soát và webhook nối lại trạng thái delivery hoặc bounce. Resend, Postmark và Mailgun đều phát huy lợi thế ở kiểu tích hợp này. SDK thực chất làm lớp bọc cho API, nhưng một SDK đúng chất framework có thể tiết kiệm nhiều thời gian. React Email của Resend là ví dụ rõ nhất: tôi viết component, render và gửi ngay trong cùng luồng làm việc của app React hoặc Next.js.

Cũng cần tách hai việc thường bị gom chung. Một là gửi email thật ra Internet. Hai là bắt email lúc dev để xem nội dung mà không gửi cho ai. Nếu chỉ cần kiểm tra reset link trên máy cá nhân, dựng Mailpit thường đúng hơn việc xin production access của Postmark. Ngược lại, Mailpit đẹp đến đâu cũng không trả lời được câu hỏi mail có vào Gmail hay bị bounce.

Bảng so sánh những lựa chọn đáng xem

Free tier trong bảng là mức khoảng tại thời điểm tôi viết bài. Provider email đổi quota khá thường xuyên, nên hãy verify lại trang pricing trước khi chốt kiến trúc hoặc hứa chi phí với khách hàng.

ProviderĐăng ký dễ khôngFree tier approxMethodHợp ai
SMTP2GORất dễ, không cần thẻ, test chưa cần domainKhoảng 1.000 mail/tháng, 200/ngàySMTP, REST, webhook, sandboxLocalhost, solo dev, app cũ
BrevoDễ, không cần thẻKhoảng 9.000 mail/tháng, 300/ngàySMTP, REST, SDK, webhook, inboundSolo dev cần cả transactional và marketing
MailjetDễ, verify một senderKhoảng 6.000 mail/tháng, 200/ngàySMTP, REST, SDK, webhook, inboundTeam nhỏ cần editor và API
PostmarkDev access nhanh, production có thể cần duyệt100 mail/tháng lâu dàiSMTP, REST, SDK, webhook, inboundTransactional quan trọng, agentic workflow
SendGridTrial dễ, có thể qua compliance review100 mail/ngày trong khoảng 60 ngàySMTP, REST, SDK, webhook, inbound parseEnterprise cần hệ sinh thái rộng
MailgunCần verify domainKhoảng 3.000 mail/tháng, 100/ngàySMTP, REST, SDK, webhook, inbound routesDeveloper cần route email linh hoạt
MailerooSelf-service, không cần thẻ3.000 outbound và 1.000 inbound/thángSMTP, REST, webhookApp nhỏ cần inbound, muốn thử dedicated IP
ZeptoMailCần tài khoản Zoho và verify domainKhoảng 10.000 credit trial trong một thángSMTP, REST, webhookTransactional thuần, thích pay-as-you-go
SweegoSelf-service, không cần thẻKhoảng 3.000 mail/tháng, 100/ngàySMTP, REST, SDK, HMAC webhookTeam EU cần GDPR, email và SMS
AWS SESSetup nặng hơn, phải ra khỏi sandboxCó quota tùy hệ AWS, sau đó tính theo dùngSMTP, API, SDK, SNS eventHệ thống lớn đã ở AWS
MailerSendKhá dễ, cần verify sender hoặc domainKhoảng 3.000 mail/thángSMTP, REST, SDK, template builderTeam nhỏ muốn DX tốt và dashboard rõ
ResendRất dễ với developer, cần verify domain khi gửi thậtKhoảng 3.000 mail/tháng, 100/ngàyAPI-first, SDK, webhook, SMTPVibe coder, Next.js, React

Cá nhân tôi không chọn dựa trên con số free lớn nhất. Quota cao không có nhiều ý nghĩa nếu dashboard bounce khó dùng hoặc tài khoản production bị treo đúng ngày launch. Bảng chỉ giúp loại bớt lựa chọn, không thay thế được persona và mức độ quan trọng của email trong sản phẩm.

MailerSend là phương án ở giữa mà tôi vẫn đang dùng: dashboard dễ đọc hơn SES, template builder tiện cho người không muốn sửa component, nhưng luồng code không gọn bằng Resend.

Mailpit, smtp4dev, Ethereal và Mailtrap không phải đối thủ của SES

Đây là nhóm bắt mail lúc dev. Chúng giữ email trong inbox giả để mình inspect nội dung, header, attachment hoặc link. Không có email nào cần bay ra Internet.

Mailpit là lựa chọn local tôi thích nhất. brew install mailpit là có một binary Go gọn, hoặc chạy bằng Docker. Nó có SMTP, REST API, webhook, POP3 và web UI. Với project mới, tôi chọn Mailpit thay cho MailHog.

smtp4dev hợp khi cần nhiều protocol hơn, gồm SMTP, REST, OAuth2, IMAP, POP3 và web UI. Ethereal Email nhẹ đầu cho Nodemailer: gọi nodemailer.createTestAccount(), không cần signup, mail thử tự hết hạn. Mailtrap có cả sandbox inbox lẫn dịch vụ gửi thật, hợp với team chưa muốn dựng tool local.

Đừng dùng free tier production như hộp thư rác cho test tự động. Local catcher nhanh hơn, không hao quota và không gửi nhầm cho người thật. Tôi chỉ dùng provider thật ở staging khi cần kiểm tra DNS, deliverability và webhook.

Agentic: tôi chọn Postmark

Với AI agent tự gửi email trong một vòng lặp, tôi chọn Postmark. Agent cần biết delivery đã tới đâu, địa chỉ nào bounce và có nên dừng hay chuyển bước. Postmark có deliverability tốt cho transactional email, API tối giản, webhook delivery và bounce phản hồi nhanh. Agent nhờ đó đóng được vòng phản hồi thay vì gửi xong rồi đoán.

Free tier 100 mail mỗi tháng không hào phóng, production access cũng có thể cần duyệt. Tôi chấp nhận vì agentic workflow có blast radius lớn hơn một form liên hệ. Runner-up là Resend cho app JavaScript hiện đại, hoặc Maileroo nếu cần thử cả inbound với ngân sách bằng không.

Vibe coder: tôi chọn Resend

Với người dựng app nhanh bằng Next.js hoặc React, tôi chọn Resend. Đây là provider có developer experience tốt nhất trong nhóm tôi đã dùng. API key, SDK, React Email, idempotency và docs nối với nhau tự nhiên. Luồng gửi email chỉ mất vài dòng, nên tôi không bị kéo khỏi feature chính.

Tôi dùng Resend cho mấy app Next.js chính vì cảm giác này. Component email được review cùng code, free tier khoảng 3.000 mail mỗi tháng cũng đủ cho giai đoạn đầu. Runner-up là Brevo khi app sắp cần newsletter, contact list hoặc SMS.

Solo dev: tôi chọn Brevo

Nếu làm một mình, ngân sách bằng không và muốn free tier sống lâu, tôi chọn Brevo. Mức miễn phí khoảng 9.000 email mỗi tháng, giới hạn 300 mỗi ngày, đủ cho nhiều app nhỏ. Đăng ký không cần thẻ. Một tài khoản còn gộp được transactional email lẫn marketing.

Brevo không tinh gọn bằng Resend, nhưng solo dev thường cần kéo dài runway hơn là tối ưu SDK. Runner-up là SMTP2GO. Free tier khoảng 1.000 mail mỗi tháng sống lâu, thả SMTP credentials vào app là chạy. Tôi cũng chọn nó cho project cũ không đáng viết lại sang REST API.

Enterprise: tôi chọn AWS SES

Ở quy mô lớn, tôi chọn AWS SES. Tôi đang chạy production trên SES vì chi phí cực thấp khi volume tăng, hạ tầng nằm sẵn trong AWS, quyền truy cập đi qua IAM, event nối được bằng SNS. Với tổ chức đã có compliance và vận hành AWS, thêm một vendor email độc lập đôi khi tạo nhiều việc hơn giá trị.

SES không dễ. Phải xử lý sandbox, verify identity, DNS, reputation và tự ghép event pipeline. Tôi không đưa nó cho vibe coder cần gửi email ngay chiều nay. Enterprise có người vận hành và cần tối ưu ở scale, nên phần setup đổi lại quyền kiểm soát tốt hơn. Runner-up là SendGrid nếu cần nhiều tính năng, inbound parse và support.

Chọn theo persona, không theo bảng xếp hạng

Không có provider email tốt nhất cho mọi project. Postmark hợp agentic, Resend hợp vibe coder, Brevo hợp solo dev, còn AWS SES hợp enterprise. Pricing và free tier có thể đổi sau ngày bài này xuất bản, nên hãy verify lại trước khi chốt, nhưng đừng để một con số quota kéo bạn sang sai kiểu vận hành.