Lỗi WordPress wp_mail không gửi được là một trong những vấn đề phổ biến nhất khi vận hành website, ảnh hưởng trực tiếp đến khả năng gửi email xác nhận đơn hàng, reset mật khẩu, thông báo bình luận hay email marketing. Hàm wp_mail() trong WordPress mặc định dùng PHP mail() nhưng hầu hết môi trường hosting chia sẻ (shared hosting) đều chặn hoặc giới hạn cổng 25, dẫn đến email không đến tay người nhận hoặc rơi vào spam. Bài viết này sẽ phân tích toàn bộ nguyên nhân gốc rễ và hướng dẫn bạn từng bước khắc phục dứt điểm lỗi này.
Hiểu đúng cơ chế wp_mail và vì sao email WordPress không gửi

Hàm wp_mail() là wrapper của WordPress dùng để gửi email, mặc định nó gọi đến PHP mail() function. PHP mail() sử dụng chương trình MTA (Mail Transfer Agent) như Sendmail hoặc Postfix trên server. Khi server không được cấu hình đúng hoặc hosting block port 25 (cổng SMTP mặc định), email sẽ thất bại.
Theo khảo sát từ các plugin SMTP, hơn 60% website WordPress gặp sự cố khi dùng PHP mail() bởi các nhà cung cấp hosting coi đây là vector spam và vô hiệu hóa chức năng này. WordPress wp_mail không gửi được thường xuất hiện dưới dạng: người dùng không nhận được email kích hoạt, đơn hàng không có xác nhận, hoặc email được gửi nhưng vào mục Spam.
Nguyên nhân khiến WordPress wp_mail không gửi được

Có nhiều nguyên nhân dẫn đến lỗi wp_mail,
Phía máy chủ (Server)
- Hosting chặn port 25 hoặc hạn chế email outbound: Hầu hết hosting chia sẻ (VPS giá rẻ, shared hosting) đều chặn port 25 để ngăn spam. Một số chỉ cho phép gửi qua SMTP với port 587 hoặc 465.
- PHP mail() bị vô hiệu hóa: Hosting có thể disable hàm
mail()trong php.ini vì lý do bảo mật. - Sendmail/Postfix không hoạt động: Máy chủ không có MTA hoặc MTA không cấu hình đúng cách.
- IP bị blacklist: Nếu server trước đó từng gửi spam, địa chỉ IP sẽ nằm trong danh sách đen, khiến email bị từ chối ngay lập tức.
- Thiếu SPF/DKIM/DMARC record: Các bản ghi DNS xác thực người gửi không được thiết lập, email dễ bị mark là spam.
- Thiếu plugin SMTP: Không sử dụng plugin SMTP nên wp_mail mặc định dùng PHP mail().
- Sai thông tin SMTP trong file wp-config.php: Nhập sai host, port, username, password hoặc không kích hoạt SSL/TLS.
- Email sender không hợp lệ (no-reply@domain.com không tồn tại): Nhiều chủ web dùng email
wordpress@domain.commà chưa tạo hộp thư thực sự, dẫn đến bounce. - Plugin SEO, Contact Form 7, WooCommerce xung đột: Một số plugin ghi đè hàm wp_mail() hoặc can thiệp vào headers gây lỗi.
- Chỉ kiểm tra email spam mà không xem log server.
- Dùng Gmail SMTP free (limit 500 email/ngày) cho website có traffic lớn mà không xem xét quota.
- Cài nhiều plugin SMTP cùng lúc gây xung đột.
- Kiểm tra tường lửa (firewall) server: đảm bảo port 587/465 được mở.
- Thử tắt tất cả plugin ngoại trừ plugin SMTP và theme mặc định (Twenty Twenty-Four) để loại trừ xung đột.
- Dùng plugin Check & Log Email để ghi lại tất cả email gửi từ WordPress, xem trạng thái thành công hay fail.
- Liên hệ hosting yêu cầu bật PHP mail() hoặc mở port SMTP.
- Dùng email không tồn tại làm sender: Luôn tạo hộp thư thật (ví dụ admin@domain.com) trên hosting hoặc dùng địa chỉ Gmail đã xác minh.
- Không kiểm tra giới hạn gửi của SMTP free: Gmail free giới hạn 500 email/ngày, SendGrid free 100 email/ngày. Nếu website gửi nhiều hơn, email sẽ bị trả về lỗi.
- Bỏ qua log error: Khi wp_mail thất bại, kiểm tra WP_DEBUG log, thư mục /wp-content/debug.log và email log của plugin SMTP để biết nguyên nhân cụ thể.
- Đặt sai port hoặc encryption: Gmail SMTP dùng port 587 TLS, không phải 465 SSL. SendGrid dùng 587 TLS hoặc 2525 không mã hóa. Kiểm tra kỹ thông số từ nhà cung cấp.
- Không cập nhật plugin SMTP: Plugin lỗi thời có thể không tương thích với PHP 8.x hoặc thay đổi API dịch vụ email.
- Luôn giữ lại bản ghi log email để kiểm tra khi có sự cố.
- Không dùng chung tài khoản SMTP cho nhiều website (dễ bị rate limit).
- Với website thương mại điện tử (WooCommerce), nên dùng dịch vụ email transactional (SendGrid, Mailgun) vì khối lượng email giao dịch lớn.
- Kiểm tra định kỳ danh sách email bounce và loại bỏ địa chỉ không hợp lệ.
- Sử dụng plugin SMTP có chức năng “forced from email” để đảm bảo email gửi đi đúng tên miền.
Phía cấu hình WordPress
Sai lầm phổ biến khi debug
Hướng dẫn khắc phục lỗi wp_mail không gửi được từ A đến Z

Bước 1: Kiểm tra log lỗi và xác nhận wp_mail thất bại
Trước tiên, kích hoạt WP_DEBUG trong wp-config.php để nhận thông báo lỗi. Thêm dòng:
define('WP_DEBUG', true);
define('WP_DEBUG_LOG', true);
define('WP_DEBUG_DISPLAY', false);
Sau đó tạo file test.php trong thư mục gốc WordPress với nội dung gọi wp_mail và xem log /wp-content/debug.log. Nếu không thấy lỗi, chuyển sang bước 2.
Bước 2: Sử dụng plugin SMTP chuyên dụng
Đây là giải pháp tối ưu nhất cho 90% trường hợp wordpress wp_mail không gửi được. Các plugin SMTP thay thế PHP mail() bằng kết nối SMTP qua cổng 587 (TLS) hoặc 465 (SSL), đảm bảo email được gửi qua máy chủ thư thực thụ.
| Plugin | Đặc điểm | Phù hợp với |
|---|---|---|
| WP Mail SMTP | Hỗ trợ nhiều mailer (Mailgun, SendGrid, Gmail SMTP, SMTP tùy chỉnh), có log email chi tiết. | Mọi website, đặc biệt khuyên dùng cho người mới. |
| Easy WP SMTP | Nhẹ, đơn giản, cấu hình nhanh, miễn phí. | Website nhỏ, cần gửi ít email. |
| Post SMTP | Mạnh mẽ, có chức năng test và debug, hỗ trợ OAuth 2.0. | Website thương mại điện tử, cần gửi email giao dịch. |
Sau khi cài plugin, vào Settings → WP Mail SMTP, chọn mailer là “Other SMTP” hoặc “Gmail SMTP” tùy dịch vụ bạn dùng. Nhập host (thường là smtp.gmail.com, smtp.sendgrid.net, smtp.mailgun.org…), encryption (TLS hoặc SSL), port (587 hoặc 465) và thông tin xác thực.
Bước 3: Cấu hình thông số SMTP chính xác
Ví dụ với Gmail SMTP (dùng cho test): host smtp.gmail.com, port 587, encryption TLS, username là địa chỉ Gmail, password là App Password (không phải mật khẩu thường). Với dịch vụ chuyên nghiệp như SendGrid: host smtp.sendgrid.net, port 587, username apikey, password chính là API Key.
Nhấn “Send a Test Email” để kiểm tra. Nếu nhận được email test, nghĩa là wordpress wp_mail không gửi được đã được giải quyết.
Bước 4: Thiết lập bản ghi DNS SPF, DKIM, DMARC
Đây là bước quan trọng để email không bị spam. Thêm bản ghi SPF vào DNS của domain:
v=spf1 include:spf.sendgrid.net ~all (thay sendgrid.net bằng domain mailer bạn dùng).
DKIM thường được cung cấp bởi service email (SendGrid/Mailgun), bạn copy giá trị public key và thêm CNAME record. DMARC giúp giám sát việc xác thực email. Sau khi thêm, đợi 24-48h để DNS propagate.
Bước 5: Gỡ rối nâng cao (khi vẫn thất bại)
So sánh các phương pháp gửi email WordPress
| Phương pháp | Độ tin cậy | Bảo mật | Chi phí | Yêu cầu kỹ thuật |
|---|---|---|---|---|
| PHP mail() mặc định | Thấp (dễ fail hoặc spam) | Thấp | Miễn phí | Không |
| Plugin SMTP + dịch vụ free (Gmail, SendGrid free tier) | Trung bình-cao | Cao (TLS/SSL) | Miễn phí (giới hạn số lượng) | Trung bình (cần tạo App Password hoặc API key) |
| Dịch vụ email API chuyên nghiệp (SendGrid, Mailgun, SES) | Rất cao | Cao nhất | Trả phí (từ $15/tháng) | Thấp (có plugin trung gian) |
Sai lầm thường gặp khi xử lý lỗi wp_mail và cách tránh

Lưu ý quan trọng khi gửi email từ WordPress
Câu hỏi thường gặp về lỗi WordPress wp_mail không gửi được

Tại sao wp_mail không gửi được email dù đã cài plugin SMTP?
Nguyên nhân thường do nhập sai thông tin SMTP (host, port, tên tài khoản). Kiểm tra lại thông số từ nhà cung cấp dịch vụ, đảm bảo dùng đúng port TLS (587) hoặc SSL (465). Ngoài ra hãy xác nhận rằng plugin SMTP đang active chứ không chỉ installed. Một số hosting có tường lửa chặn port 587, thử chuyển sang port 465 hoặc 2525 (nếu được hỗ trợ).
Làm thế nào để debug chính xác lỗi wp_mail?
Kích hoạt WP_DEBUG và WP_DEBUG_LOG, sau đó tạm thời chuyển theme sang Twenty Twenty-Four và chỉ giữ lại plugin SMTP. Tạo một trang test với shortcode gọi wp_mail (hoặc dùng plugin Check & Log Email). Xem log file và kiểm tra email test có đến hộp thư không. Nếu không có lỗi, đó là do xung đột plugin/theme. Nếu có lỗi cụ thể (như “SMTP connect() failed”), hãy kiểm tra thông tin host và port.
Có cần dùng plugin SMTP không? Hay chỉ cần sửa file functions.php?
Không khuyến khích sửa functions.php để cấu hình wp_mail vì dễ sai cú pháp, khó bảo trì và không có giao diện test. Plugin SMTP là lựa chọn an toàn, thân thiện và hỗ trợ log chi tiết. Nếu bạn muốn code thủ công, có thể dùng hàm add_action('phpmailer_init', 'custom_phpmailer_smtp') nhưng cần kiến thức lập trình cao.
Vì sao email WordPress gửi được nhưng vào mục Spam?
Đây là dấu hiệu thiếu xác thực SPF/DKIM/DMARC. Đồng thời nội dung email không nên chứa quá nhiều link, hình ảnh lớn hoặc từ ngữ kích thích (miễn phí, click here). Hãy thiết lập DNS record đầy đủ và dùng sender domain trùng với domain website.
Dùng Gmail SMTP cho website thương mại có bền vững không?
Gmail SMTP free giới hạn 500 email/ngày và có nguy cơ khóa tài khoản nếu gửi quá nhiều. Với website bán hàng có hơn 100 đơn/ngày, hãy dùng dịch vụ email transactional như SendGrid (free 100 email/ngày) hoặc Amazon SES (rẻ và scalable).
Kết luận
Lỗi WordPress wp_mail không gửi được hầu như đều có thể khắc phục bằng cách chuyển từ PHP mail() sang SMTP thông qua một plugin chuyên dụng kết hợp cấu hình đúng port, encryption và xác thực DNS. Đừng bỏ qua bước kiểm tra log và test email sau mỗi thay đổi. Với hướng dẫn chi tiết trên đây, bạn hoàn toàn có thể tự xử lý vấn đề và đảm bảo hệ thống email WordPress hoạt động ổn định, tăng tỷ lệ giao hàng và uy tín thương hiệu.
- Hướng dẫn sửa lỗi WordPress LiteSpeed configuration chi tiết từ A đến Z
- Google Core Update Là Gì? Hướng Dẫn Chi Tiết Từ A-Z Cho Người Làm SEO
- Elementor Motion Effects Lỗi: Nguyên Nhân Và Cách Khắc Phục Chi Tiết Nhất
- Tối ưu hình ảnh WordPress: Bí quyết tăng tốc website và cải thiện SEO toàn diện
- Quản trị mạng multisite WordPress: Chiến lược tối ưu cho hệ thống website đa站点













