Khi vận hành một website WordPress, việc gửi email có file đính kèm là nhu cầu thường xuyên: gửi hóa đơn, báo giá, tài liệu cho khách hàng, hoặc gửi báo cáo từ form liên hệ. Tuy nhiên, không ít người gặp phải tình trạng wordpress email attachment lỗi – thư được gửi đi nhưng file đính kèm bị thiếu, bị hỏng, dung lượng vượt quá giới hạn, hoặc email không đến được hộp thư người nhận. Lỗi này gây ảnh hưởng trực tiếp đến hoạt động kinh doanh và trải nghiệm người dùng. Bài viết này sẽ phân tích toàn diện các nguyên nhân phổ biến và hướng dẫn bạn từng bước khắc phục.
Bản Chất Của Lỗi WordPress Email Attachment

WordPress sử dụng hàm wp_mail() dựa trên hàm PHP mail() mặc định của máy chủ. Khi gửi email có file đính kèm, WordPress phải đọc file từ thư mục upload (hoặc đường dẫn tạm thời), encode thành MIME base64, và gắn vào phần header của email. Nếu bất kỳ bước nào trong quy trình này gặp trục trặc – giới hạn bộ nhớ, sai đường dẫn file, cấu hình server không cho phép gửi file lớn, hoặc plugin xung đột – thì lỗi sẽ xảy ra.
Bản chất kỹ thuật: WordPress không thực sự “đính kèm” file như cách bạn làm trong Gmail. Nó chuyển đổi file thành chuỗi text, chèn vào body email với header Content-Type phù hợp. Điều này tiêu tốn tài nguyên đáng kể, đặc biệt với file dung lượng lớn.
Phân Loại Các Lỗi WordPress Email Attachment Thường Gặp

Dựa trên triệu chứng thực tế, có thể chia lỗi thành các nhóm chính:
1. Lỗi File Đính Kèm Bị Thiếu Hoặc Trống
Email đến tay người nhận nhưng không có file đính kèm, hoặc file có kích thước 0KB. Nguyên nhân thường do:
- Đường dẫn file không chính xác (absolute path sai).
- File tạm thời (temporary file) bị server xóa trước khi gửi.
- Plugin tạo file động nhưng không trả về đường dẫn đúng.
- Dung lượng file vượt quá giới hạn PHP (upload_max_filesize, post_max_size).
- Thời gian thực thi script PHP quá ngắn (max_execution_time).
- Server chặn hàm
mail()hoặc không có SMTP. - Encoding sai MIME type (ví dụ văn bản gửi dạng application/octet-stream).
- Server giới hạn bộ nhớ PHP dẫn đến việc cắt xén dữ liệu file.
- Vấn đề với plugin caching email hoặc plugin bảo mật.
- Chỉnh sửa file php.ini (nếu có quyền).
- Thêm vào file .htaccess trong thư mục gốc WordPress:
2. Lỗi Email Không Được Gửi Đi
Thông báo “Email could not be sent” ngay khi click gửi, thường do:
3. Lỗi File Bị Hỏng Hoặc Không Mở Được
File đến nơi nhưng không thể mở (báo lỗi định dạng, file hỏng). Nguyên nhân:
4. Lỗi Email Vào Spam Khi Có Attachment
Email có file đính kèm dễ bị đánh dấu là spam hơn. Nếu không cấu hình SMTP và SPF/DKIM/DMARC, thư thường rơi vào thư mục spam của người nhận.
Nguyên Nhân Chi Tiết Gây Ra Lỗi WordPress Email Attachment

Thông thường:
| Tham số PHP | Giá trị mặc định (thường gặp) | Mức tối thiểu để đính kèm file 5MB |
|---|---|---|
| upload_max_filesize | 2M – 8M | ≥ 10M |
| post_max_size | 8M – 20M | ≥ 12M |
| memory_limit | 64M – 128M | ≥ 256M |
| max_execution_time | 30 – 60 giây | ≥ 120 giây |
Nếu dung lượng file đính kèm vượt quá upload_max_filesize hoặc post_max_size, WordPress sẽ không thể xử lý và gửi email. Ngoài ra, memory_limit quá thấp khiến quá trình encode file bị dừng giữa chừng.
Đường Dẫn File Sai Hoặc Không Tồn Tại
Trong code gửi email, bạn cần cung cấp đường dẫn tuyệt đối tới file trên server (ví dụ: /home/user/public_html/wp-content/uploads/invoice.pdf). Một số plugin hoặc code tùy chỉnh chỉ dùng đường dẫn tương đối (wp-content/uploads/invoice.pdf) dẫn đến lỗi không tìm thấy file.
Server Không Hỗ Trợ Hàm mail() Hoặc Vấn Đề Với PHP Mail
Nhiều hosting shared đã vô hiệu hóa hàm mail() vì lý do bảo mật, hoặc cấu hình Sendmail/PHP mail không hoạt động đúng. Khi đó email không được gửi đi, hoặc gửi nhưng thiếu attachment vì header không đúng chuẩn.
Xung Đột Plugin
Các plugin liên quan đến email (Contact Form 7, Gravity Forms, WooCommerce, SMTP plugin…) có thể xung đột khi xử lý attachment. Đặc biệt, plugin bảo mật như Wordfence, Sucuri, hoặc plugin caching (WP Rocket, W3 Total Cache) đôi khi chặn hoặc thay đổi header email.
Lỗi Khi Dùng Hàm wp_mail() Tùy Chỉnh
Nếu bạn tự viết code gửi email, cần tuân thủ đúng cú pháp. Tham số attachments phải là mảng các đường dẫn tuyệt đối. Sai cú pháp (ví dụ dùng mảng lồng, object thay vì string) gây lỗi ngay lập tức.
Hướng Dẫn Chi Tiết Khắc Phục Lỗi WordPress Email Attachment

Áp dụng các bước sau theo thứ tự ưu tiên từ đơn giản đến phức tạp.
Bước 1: Kiểm Tra Cấu Hình PHP
Truy cập vào WordPress Dashboard > Tools > Site Health > Info tab > Server. Xem các giá trị upload_max_filesize, post_max_size, memory_limit, max_execution_time. Nếu chúng quá thấp, tăng chúng lên bằng cách:
(Lưu ý: không dùng code block trong output, chỉ mô tả bằng văn bản).
Hoặc tạo file php.ini riêng trong thư mục /wp-admin/ với các giá trị tương tự. Một số host cho phép tăng qua cPanel → Select PHP Version → Switch to PHP Options.
Bước 2: Sử Dụng Plugin SMTP Thay Vì PHP Mail
Chuyển từ hàm mail() mặc định sang SMTP giúp tăng tỷ lệ gửi thành công và tránh lỗi attachment. Hai plugin phổ biến:
- WP Mail SMTP: Hỗ trợ Gmail, Microsoft 365, SendGrid, Mailgun, SMTP tùy chỉnh. Có tùy chọn force email attachment vào form.
- Easy WP SMTP: Nhẹ, cấu hình đơn giản.
Sau khi cài plugin, cấu hình tài khoản SMTP (ví dụ SMTP của Gmail: smtp.gmail.com, port 587, TLS). Kiểm tra gửi email thử có file đính kèm nhỏ (dưới 2MB).
Bước 3: Xác Minh Đường Dẫn File Trong Code
Đảm bảo đường dẫn file là tuyệt đối. Cách lấy đường dẫn tuyệt đối chuẩn xác trong WordPress:
- Dùng hàm
get_home_path()hoặcABSPATHđể ghép với đường dẫn tương đối. - Kiểm tra bằng cách echo đường dẫn ra màn hình trước khi gửi.
- Nếu plugin Contact Form 7: Vào CF7 → Form → thêm tag file và cấu hình “Attach the uploaded file to the email” (có tích hợp sẵn).
Bước 4: Kiểm Tra Lỗi Encoding Và Dung Lượng File
Khi gửi file dung lượng lớn (hơn 10MB), cân nhắc sử dụng FTP hoặc link download thay vì đính kèm trực tiếp. Vì server thường giới hạn email attachment ở mức 20-25MB (do giới hạn MTA).
Nếu file bị hỏng: thử gửi qua SMTP plugin có chức năng “Force From Email” và “Set Return-Path”. Một số plugin SMTP có tùy chọn “Send Attachments as Multipart” giúp tránh lỗi encoding.
Bước 5: Tắt Plugin Từng Cái Để Xác Định Xung Đột
Vào Plugins → Deactivate tất cả plugin. Gửi email thử (bằng code test hoặc plugin test email). Nếu OK, kích hoạt từng plugin và kiểm tra lại. Plugin hay gây xung đột: caching plugin, security plugin, email log plugin.
Bước 6: Kiểm Tra Error Log Trên Server
Truy cập file error_log trong thư mục gốc WordPress hoặc thư mục /wp-content/. Hoặc dùng plugin WP Debugging để hiển thị lỗi. Các lỗi thường gặp: “Allowed memory size exhausted”, “upload_tmp_dir not writable”, “file not found”.
Bước 7: Tăng Giới Hạn Attachment Trong Plugin Contact Form
Với Contact Form 7: vào CF7 → Form → thêm [file your-file limit:8mb filetypes:pdf,docx]. Giới hạn mặc định thường là 8MB.
Nguyên nhân thường là do server không hỗ trợ hàm mail(), hoặc plugin bảo mật chặn. Hãy chuyển sang SMTP và kiểm tra error log.
Làm thế nào để tăng giới hạn dung lượng file đính kèm trong WordPress?
Bạn cần tăng các tham số PHP: upload_max_filesize, post_max_size, memory_limit và max_execution_time. Thực hiện qua.htaccess, php.ini hoặc cPanel.
Plugin nào giúp khắc phục lỗi attachment tốt nhất?
WP Mail SMTP là giải pháp hàng đầu. Nó chặn mọi lỗi từ PHP mail và cung cấp chi tiết debug.
Email gửi thành công nhưng file bị hỏng thì xử lý thế nào?
Thử tăng memory_limit lên 256M, đồng thời kiểm tra MIME type của file (dùng hàm mime_content_type). Nếu file PDF, hãy chắc chắn thư viện PHP PDF không gây lỗi.
Có nên gửi file dung lượng 20MB qua email WordPress không?
Không nên. Đa số SMTP server (Gmail, SendGrid) giới hạn 25MB, nhưng quá trình encode và gửi tốn tài nguyên. Tốt nhất upload lên cloud và gửi link.
Kết Luận

WordPress email attachment lỗi có nhiều nguyên nhân khác nhau, từ cấu hình PHP thấp, đường dẫn file sai, đến xung đột plugin hay server không hỗ trợ SMTP. Bằng cách áp dụng tuần tự các bước kiểm tra – tăng giới hạn tài nguyên, chuyển sang SMTP, xác minh đường dẫn, và debug từng plugin – bạn hoàn toàn có thể khắc phục triệt để. Đừng quên sử dụng plugin Email Log để ghi nhận lỗi và giám sát. Một hệ thống email ổn định giúp website của bạn chuyên nghiệp hơn và tránh mất khách hàng tiềm năng.
- Xử Lý Lỗi WooCommerce Email Refund: Nguyên Nhân Và Giải Pháp Chi Tiết
- Woocommerce giỏ hàng không cộng số lượng: Nguyên nhân và cách khắc phục triệt để
- WordPress SMTP Timeout: Nguyên Nhân, Cách Khắc Phục và Tối Ưu Gửi Email
- Hướng dẫn chi tiết thiết lập thanh toán chuyển khoản WooCommerce từ A đến Z
- Hướng dẫn xử lý lỗi kích hoạt Elementor Pro: Nguyên nhân và giải pháp toàn diện
















