Lỗi WordPress email attachment missing (mất tệp đính kèm trong email) là một trong những vấn đề gây đau đầu nhất cho quản trị viên website. Khi khách hàng gửi biểu mẫu liên hệ kèm file PDF, CV, hình ảnh sản phẩm nhưng email nhận được lại trống trơn, không có tệp đính kèm – điều này ảnh hưởng trực tiếp đến uy tín doanh nghiệp và trải nghiệm người dùng. Thực tế, hơn 40% website WordPress gặp sự cố liên quan đến email kể từ phiên bản 5.0 trở đi, và vấn đề attachment missing chiếm tỷ lệ đáng kể.
Bản Chất Của Lỗi WordPress Email Attachment Missing

Khi WordPress gửi email qua hàm wp_mail(), hệ thống sử dụng thư viện PHPMailer để xử lý. Tuy nhiên, quá trình đính kèm tệp có thể bị gián đoạn do nhiều nguyên nhân: lỗi cấu hình máy chủ, giới hạn kích thước tệp, xung đột plugin, hoặc mã hóa header không đúng chuẩn MIME. Về bản chất, email vẫn được gửi thành công nhưng phần attachment bị loại bỏ hoặc không được ghép đúng cách.
Khác với lỗi email không gửi được, vấn đề này thường im lặng – không có thông báo lỗi nào hiển thị trên website. Bạn chỉ phát hiện khi kiểm tra hộp thư đến và thấy nội dung email thiếu file đính kèm. Điều này khiến việc debug trở nên khó khăn hơn.
Những Nguyên Nhân Phổ Biến Khiến WordPress Email Attachment Bị Mất
1. Giới Hạn Kích Thước Tệp Đính Kèm Từ Máy Chủ
Hầu hết các nhà cung cấp hosting đều giới hạn kích thước tệp tối đa cho phép gửi qua email, thường từ 2MB đến 25MB. Nếu tệp của bạn vượt quá ngưỡng này, PHPMailer sẽ không thể đính kèm và âm thầm bỏ qua. Cần phân biệt giữa upload_max_filesize (giới hạn tải lên) và mail.attachment_limit (không tồn tại trong PHP mặc định) – thực tế vấn đề nằm ở bộ nhớ và thời gian xử lý script.
2. Sai Đường Dẫn Tệp Trong Mã Nguồn
Khi lập trình viên nhúng tệp đính kèm với đường dẫn tuyệt đối nhưng server sử dụng cấu trúc thư mục khác, hoặc dùng URL thay vì đường dẫn vật lý, file sẽ không được tìm thấy. Ví dụ: sử dụng wp_upload_dir() sai cách dẫn đến path không tồn tại tại thời điểm gửi email.
3. Plugin Gửi Email SMTP Gây Xung Đột
Các plugin SMTP như WP Mail SMTP, Easy WP SMTP, Post SMTP đôi khi override cấu hình attachment mặc định. Một số plugin không hỗ trợ đầy đủ multipart MIME type, dẫn đến mất attachment trong quá trình chuyển đổi mã hóa. Đặc biệt, các plugin cũ không tương thích với PHP 8.0+ thường gặp lỗi này.
4. Bộ Lọc Email Của Hosting Hoặc Email Server
Các dịch vụ email doanh nghiệp (Google Workspace, Microsoft 365) hoặc mail server của hosting có thể kích hoạt tính năng bảo mật tự động loại bỏ tệp đính kèm có phần mở rộng nguy hiểm (.exe,.zip,.php). Đôi khi cả file PDF với nội dung động cũng bị chặn.
5. Mã Hóa Base64 Khi Gửi Qua API Bên Thứ Ba
Khi sử dụng dịch vụ gửi email qua API (Mailgun, SendGrid, Amazon SES), attachment cần được mã hóa Base64 và gửi kèm theo cấu trúc JSON. Nếu developer không chuyển đổi đúng format hoặc thiếu Content-Transfer-Encoding, email server sẽ không giải mã được attachment.
Hướng Dẫn Kiểm Tra Và Xác Định Nguyên Nhân Cụ Thể

Bước 1: Kích Hoạt Debug Mode WordPress
Thêm vào file wp-config.php dòng: define(‘WP_DEBUG’, true); define(‘WP_DEBUG_LOG’, true);. Gửi thử email test và kiểm tra file /wp-content/debug.log để tìm lỗi PHPMailer. Lỗi thường xuất hiện dưới dạng: Could not attach file /path/to/file.pdf hoặc Invalid address format.
Bước 2: Kiểm Tra Giới Hạn Kích Thước Tệp
| Thông số | Giá trị tối thiểu | Giá trị khuyến nghị |
|---|---|---|
| upload_max_filesize | 2M | 32M |
| post_max_size | 8M | 64M |
| memory_limit | 64M | 256M |
| max_execution_time | 30 | 120 |
Tạo file phpinfo.php trong thư mục gốc và truy cập để xem giá trị hiện tại. Nếu upload_max_filesize nhỏ hơn kích thước attachment, cần tăng lên qua.htaccess hoặc liên hệ hosting.
Bước 3: Test Với Plugin Gửi Email Cơ Bản Nhất
Tạm thời vô hiệu hóa tất cả plugin email, sử dụng một plugin nhẹ như WP Mail SMTP phiên bản mới nhất. Cấu hình gửi qua SMTP của Gmail hoặc bất kỳ dịch vụ nào hoạt động tốt. Nếu attachment hiển thị, nguyên nhân là do plugin cũ hoặc xung đột cấu hình.
Giải Pháp Khắc Phục Lỗi WordPress Email Attachment Missing
Sử Dụng Plugin SMTP Chuyên Dụng Có Hỗ Trợ Attachment
WP Mail SMTP Pro và Post SMTP là hai plugin có cơ chế xử lý attachment tốt nhất. Chúng ghi đè hàm wp_mail() mặc định, tự động phát hiện MIME type và đảm bảo base64 encoding đúng chuẩn. Cấu hình SMTP với xác thực OAuth 2.0 (Gmail, Outlook) giúp tránh bị chặn bởi chính sách email server.
Viết Lại Hàm Gửi Email Custom Trong functions.php
Đối với nhà phát triển, có thể override trực tiếp PHPMailer:
- Hook vào action phpmailer_init để tùy chỉnh đối tượng PHPMailer.
- Đảm bảo base64 encoding cho attachment: $mail->AddAttachment($file, $name, ‘base64’, ‘application/pdf’).
- Sử dụng file path tuyệt đối lấy từ get_attached_file($attachment_id) thay vì URL.
- php_value upload_max_filesize 64M
- php_value post_max_size 64M
- php_value max_execution_time 120
- Dùng URL thay vì đường dẫn file vật lý: PHPMailer chỉ chấp nhận absolute path trên server, không phải http://.
- Gửi attachment quá lớn khi không có chunk upload: Hầu hết server giới hạn request POST dưới 32MB, nếu attachment 50MB sẽ bị drop.
- Không kiểm tra định dạng MIME type tùy chỉnh: File.pdf thường là application/pdf, nhưng nếu lấy sai từ finfo(), PHPMailer gửi sai header và email server từ chối.
- Tin tưởng hoàn toàn vào plugin miễn phí: Nhiều plugin SMTP free không cập nhật kịp với phiên bản WordPress mới, dẫn đến lỗi attachment.
Tăng Giới Hạn Tài Nguyên Server
Thêm vào file.htaccess hoặc wp-config.php các dòng:
Kiểm tra lại sau khi thay đổi và đảm bảo hosting cho phép ghi đè cấu hình PHP.
Xử Lý Attachment Qua API Email Third-Party
Khi dùng Mailgun hoặc SendGrid, sử dụng thư viện SDK chính thức thay vì HTTP request thủ công. Ví dụ với Mailgun PHP SDK, attachment được gửi kèm dưới dạng multipart/form-data đúng chuẩn. Tránh sử dụng file_get_contents() với file lớn vì dễ vượt quá memory limit.
So Sánh Các Plugin Gửi Email WordPress Cho Attachment

| Tên Plugin | Hỗ trợ attachment lớn | Xử lý MIME type | Tương thích PHP 8.x |
|---|---|---|---|
| WP Mail SMTP Pro | Tốt (có tính năng chunk) | Tự động | Đầy đủ |
| Post SMTP | Khá | Cần cấu hình thêm | Có bản cập nhật mới |
| Easy WP SMTP | Trung bình | Hạn chế | Chưa hoàn toàn |
| FluentSMTP | Tốt | Tự động & mượt | Tốt nhất |
Sai Lầm Thường Gặp Khi Xử Lý Attachment Email WordPress
Lưu Ý Quan Trọng Khi Xử Lý WordPress Email Attachment Missing

Luôn kiểm tra email thực tế bằng hai phương pháp: xem trên webmail và tải về qua ứng dụng email client. Đôi khi attachment hiển thị trên Gmail web nhưng không xuất hiện trên Outlook do cách hiển thị khác nhau. Sử dụng plugin Email Log để ghi lại toàn bộ email đã gửi kèm thông tin attachment – giúp debug nhanh chóng mà không cần gửi thật.
Nên cập nhật PHP lên phiên bản 8.0 trở lên vì các phiên bản cũ có bug liên quan đến fileinfo extension, ảnh hưởng đến việc phát hiện MIME type của attachment. Đối với hosting chia sẻ, hãy liên hệ hỗ trợ kỹ thuật để mở rộng giới hạn memory_limit và max_execution_time nếu cần gửi file dung lượng lớn.
Câu Hỏi Thường Gặp Về Lỗi Mất Attachment Trong Email WordPress
Tại sao email WordPress gửi được nội dung nhưng không có file đính kèm?
Nguyên nhân phổ biến nhất là do server giới hạn kích thước tệp hoặc đường dẫn file không chính xác. WordPress gửi email thành công nhưng bỏ qua attachment vì lỗi trong quá trình ghép multipart MIME.
Làm thế nào để tăng giới hạn kích thước attachment trong WordPress?
WP Mail SMTP Pro và FluentSMTP là hai lựa chọn hàng đầu với khả năng xử lý attachment ổn định, hỗ trợ đầy đủ PHP 8.2 và tự động chuyển đổi MIME type.
Có cần thiết phải viết code custom thay thế wp_mail không?
Chỉ cần thiết khi bạn có yêu cầu đặc biệt như gửi attachment từ thư mục bảo mật ngoài wp-content, hoặc muốn log chi tiết quá trình gửi. Đa số trường hợp, plugin SMTP đủ mạnh để xử lý.
Tại sao attachment bị mất khi dùng Contact Form 7?
Contact Form 7 sử dụng hàm wp_mail() mặc định. Nếu form có field upload file, cần đảm bảo cấu hình đúng $phpmailer trong file functions.php và kích thước file không vượt giới hạn server.
Kết Luận
Lỗi WordPress email attachment missing không phải là vấn đề phức tạp nếu bạn có phương pháp kiểm tra bài bản. Nguyên nhân chủ yếu đến từ giới hạn tài nguyên server, sai đường dẫn file, plugin xung đột hoặc thiếu cấu hình MIME type. Bằng cách tăng giới hạn upload, chọn plugin SMTP phù hợp và kiểm tra debug log, bạn có thể khắc phục triệt để trong vòng 30 phút.
Hãy luôn giữ phiên bản WordPress, PHP và tất cả plugin liên quan đến email được cập nhật mới nhất. Điều này không chỉ giúp hạn chế lỗi attachment mà còn bảo vệ website khỏi các lỗ hổng bảo mật. Nếu sau khi làm theo tất cả các bước hướng dẫn mà attachment vẫn biến mất, rất có thể mail server của bạn đang áp dụng chính sách bảo mật nghiêm ngặt – hãy kiểm tra spam folder và liên hệ nhà cung cấp dịch vụ email để được hỗ trợ thêm.
- WordPress Update Timeout: Nguyên Nhân, Cách Khắc Phục và Phòng Ngừa Hiệu Quả
- Theme WordPress Hybrid Theme Là Gì? Giải Pháp Tối Ưu Cho Website Chuyên Nghiệp
- Theme WordPress là gì? Hướng dẫn toàn diện từ A-Z cho người mới bắt đầu
- Hướng dẫn toàn diện về lịch sử mua hàng WooCommerce: Quản lý và tối ưu dữ liệu đơn hàng
- Theme WordPress Menu Dropdown Lỗi: Nguyên Nhân Và Cách Khắc Phục Toàn Diện
















