Khi vận hành một trang WordPress, việc gửi email có đính kèm hình ảnh là nhu cầu thường xuyên – từ thông báo đơn hàng, xác nhận đăng ký đến gửi báo cáo. Tuy nhiên, nhiều người dùng gặp phải tình trạng wordpress email image attachment lỗi, khiến ảnh không hiển thị, file đính kèm bị hỏng hoặc email không đến được hộp thư đến. Lỗi này xuất phát từ nhiều nguyên nhân khác nhau, từ cấu hình server, plugin xung đột cho đến giới hạn dung lượng. Bài viết này sẽ đi sâu phân tích từng nguyên nhân và cung cấp các bước xử lý chi tiết, giúp bạn chấm dứt triệt để vấn đề.
Bản chất của lỗi WordPress Email Image Attachment

Trong WordPress, việc gửi email được xử lý bởi hàm wp_mail() dựa trên thư viện PHPMailer. Khi bạn cố gắng đính kèm hình ảnh hoặc file ảnh vào email, hệ thống sẽ thực hiện các bước: đọc file từ thư mục uploads, mã hóa thành base64, ghép vào header MIME. Nếu bất kỳ bước nào gặp lỗi, email sẽ gửi thiếu attachment hoặc bị server từ chối. Lỗi phổ biến bao gồm:
- Ảnh không được hiển thị trong email, chỉ xuất hiện dưới dạng liên kết hỏng.
- File đính kèm có kích thước 0 byte hoặc không mở được.
- Email bị chặn bởi server nhận do dung lượng quá lớn.
- Header email bị lỗi khiến ảnh bị inline nhưng không render.
- upload_max_filesize = 64M
- post_max_size = 64M
- max_execution_time = 300
Hiểu được bản chất này sẽ giúp bạn xác định đúng hướng khắc phục, thay vì mò mẫm cài plugin hay sửa code lung tung.
Nguyên nhân chính gây ra lỗi đính kèm ảnh trong email WordPress
1. Giới hạn dung lượng file từ hosting/server
Hầu hết các nhà cung cấp hosting đều đặt giới hạn kích thước file tối đa cho phép gửi email, thường dao động từ 10MB đến 25MB. Nếu ảnh đính kèm vượt quá ngưỡng này, email sẽ bị drop hoặc attachment bị cắt bỏ. Kiểm tra thông số upload_max_filesize và post_max_size trong php.ini hoặc thông qua plugin như WP Server Stats.
2. Xung đột plugin gửi email (SMTP, Contact Form, WooCommerce)
Các plugin như WP Mail SMTP, Easy WP SMTP, Contact Form 7, WooCommerce đều can thiệp vào cơ chế gửi mail mặc định. Khi có xung đột giữa các plugin, việc xử lý attachment ảnh dễ bị lỗi. Ví dụ: plugin A ghi đè hàm wp_mail(), plugin B lại thay đổi header, dẫn đến file ảnh bị mất trong quá trình gửi.
3. Cấu hình PHPMailer sai
WordPress dùng PHPMailer để gửi mail. Nếu không cấu hình đúng (ví dụ: thiếu đường dẫn thư mục tạm, không thiết lập charset, hoặc sai host SMTP), việc đính kèm file nhị phân như ảnh JPEG/PNG sẽ thất bại. Lỗi thường gặp: “Could not access file” hoặc “Invalid address format”.
4. Đường dẫn file ảnh tuyệt đối không chính xác
Khi code custom, nhiều lập trình viên dùng đường dẫn URL thay vì đường dẫn tuyệt đối trên server (ví dụ: dùng wp_get_attachment_url() thay vì get_attached_file()). PHPMailer yêu cầu đường dẫn vật lý để đọc file, nếu truyền URL thì sẽ không tìm thấy ảnh, dẫn đến attachment rỗng.
5. Server chặn MIME type của ảnh
Một số server được cấu hình chặt chẽ về security, chỉ cho phép một số MIME type nhất định (ví dụ: text/plain, application/pdf). Ảnh JPEG (image/jpeg) hoặc PNG (image/png) có thể bị chặn ngầm, khiến attachment bị loại bỏ. Nguyên nhân thường đến từ mod_security hoặc các rule firewall của hosting.
6. Lỗi mã hóa base64 và encoding
Khi file ảnh quá lớn, quá trình mã hóa base64 có thể bị lỗi do memory limit, hoặc ký tự đặc biệt trong tên file (dấu tiếng Việt, khoảng trắng) gây hỏng header email. Email server nhận có thể từ chối hoặc hiển thị attachment dưới dạng text rác.
Hướng dẫn khắc phục lỗi WordPress email image attachment từng bước

Bước 1: Kiểm tra và tăng giới hạn dung lượng file
Vào file php.ini hoặc .htaccess (nếu dùng Apache), thêm các dòng:
Sau đó kiểm tra lại bằng WP Health Check plugin. Nếu không có quyền chỉnh sửa php.ini, liên hệ hosting để yêu cầu tăng giới hạn.
Bước 2: Vô hiệu hóa tạm thời các plugin gửi mail
Tắt lần lượt từng plugin liên quan đến email (WP Mail SMTP, Contact Form 7, WooCommerce Email Customizer) và gửi thử email có đính kèm ảnh. Nếu hết lỗi, xác định plugin gây xung đột, sau đó cập nhật hoặc tìm giải pháp thay thế.
Bước 3: Cấu hình PHPMailer đúng cách
Thêm đoạn code sau vào file functions.php của theme (hoặc dùng Code Snippets plugin):
add_action( 'phpmailer_init', 'fix_phpmailer_attachment' );
function fix_phpmailer_attachment( $phpmailer ) { $phpmailer->CharSet = 'UTF-8'; $phpmailer->Encoding = 'base64'; $phpmailer->Timeout = 30;
}
Điều này đảm bảo encoding nhất quán và tăng timeout để xử lý file lớn.
Bước 4: Sử dụng plugin SMTP mạnh mẽ có hỗ trợ attachment
Plugin WP Mail SMTP (bản Pro) hoặc Post SMTP cho phép kiểm tra lỗi trực quan, log chi tiết từng attachment. Kích hoạt chế độ gỡ lỗi (debug mode) để xem cụ thể lỗi nằm ở đâu. Nếu dùng bản free, nên kết hợp với Email Log để xem trạng thái gửi.
Bước 5: Dùng đường dẫn tuyệt đối thay vì URL
Trong code custom, luôn lấy đường dẫn file bằng hàm get_attached_file( $attachment_id ) thay vì wp_get_attachment_url( $attachment_id ). Ví dụ đúng:
$file_path = get_attached_file( $image_id );
wp_mail( $to, $subject, $message, $headers, array( $file_path ) );
Bước 6: Xóa bỏ ký tự đặc biệt trong tên file ảnh
Trước khi đính kèm, chạy hàm sanitize_file_name() để loại bỏ dấu tiếng Việt, khoảng trắng. Nếu ảnh được upload từ frontend, thêm filter sanitize_file_name trong quá trình upload.
Bước 7: Kiểm tra MIME type trên server
Yêu cầu hosting kiểm tra rule mod_security có chặn image/jpeg không. Hoặc tạm thời tắt mod_security để thử nghiệm. Đối với server Nginx, kiểm tra file cấu hình có dòng “types” bao gồm image/png, image/jpeg chưa.
So sánh các phương pháp gửi email có đính kèm ảnh trong WordPress
| Phương pháp | Ưu điểm | Nhược điểm | Phù hợp |
|---|---|---|---|
| Hàm wp_mail() mặc định | Đơn giản, không cần plugin | Dễ lỗi với attachment lớn, phụ thuộc hosting | Trang nhỏ, ít gửi email |
| Plugin SMTP (WP Mail SMTP, Post SMTP) | Kiểm soát tốt, log lỗi, hỗ trợ SMTP mạnh | Phiên bản Pro có phí | Trang thương mại điện tử, membership |
| Gửi qua API dịch vụ thứ ba (Mailgun, SendGrid, Brevo) | Độ tin cậy cao, tracking, không lo dung lượng | Phát sinh chi phí hàng tháng, cần cấu hình API | Trang lớn, gửi hàng ngàn email/ngày |
Lợi ích và hạn chế của việc dùng attachment ảnh qua email WordPress

Lợi ích
- Người nhận có thể xem ảnh trực tiếp trong hộp thư, không cần tải về.
- Tăng tính chuyên nghiệp cho email xác nhận đơn hàng, hóa đơn.
- Tận dụng chức năng inline image để tạo email marketing đẹp mắt.
Hạn chế
- Dung lượng email tăng lên, dễ bị chặn bởi spam filter.
- Phụ thuộc vào cấu hình server và hosting.
- Không phải email client nào cũng hiển thị inline image tốt (ví dụ Outlook cũ).
- Không thể gửi ảnh động (GIF) do giới hạn MIME type.
Những sai lầm thường gặp khi xử lý lỗi đính kèm ảnh trong email
- Dùng plugin gửi mail mà không kiểm tra log: Nhiều người chỉ cài plugin SMTP, cấu hình đại khái rồi hy vọng hết lỗi. Thực tế cần bật chế độ debug và xem log để biết lỗi cụ thể.
- Nhồi nhét nhiều ảnh vào một email: Tổng dung lượng vượt quá 20MB sẽ gây lỗi ngay cả khi host cho phép. Nên nén ảnh trước khi gửi hoặc dùng link Cloudinary.
- Sửa file core WordPress để override PHPMailer: Khi update WordPress, mọi thay đổi sẽ mất. Luôn dùng hook actions/filters trong functions.php.
- Bỏ qua phần charset và encoding: Nếu email có tiếng Việt trong tên file, thiếu charset UTF-8 sẽ khiến attachment bị hỏng.
Lưu ý quan trọng khi gửi email có đính kèm ảnh từ WordPress

- Luôn nén ảnh xuống dưới 1MB trước khi gửi (dùng TinyPNG hoặc Smush plugin).
- Đặt giới hạn số lượng attachment tối đa (ví dụ 3 file) để tránh quá tải.
- Dùng hàm wp_upload_dir()[‘basedir’] để lấy đường dẫn thư mục uploads thay vì hardcode.
- Kiểm tra email test với các client khác nhau (Gmail, Outlook, Yahoo Mail) trước khi triển khai.
- Nếu sử dụng CDN (Cloudflare) hoặc reverse proxy, đảm bảo header email không bị thay đổi ở tầng proxy.
Câu hỏi thường gặp về lỗi WordPress email image attachment
Tại sao ảnh đính kèm trong email WordPress bị lỗi hiển thị?
Nguyên nhân chính là do đường dẫn file sai (URL thay vì path), hoặc server chặn MIME type của ảnh. Kiểm tra lại đường dẫn trong code, nếu dùng wp_mail() hãy chắc chắn truyền mảng đường dẫn tuyệt đối.
Làm thế nào để gửi ảnh inline trong email WordPress?
Để gửi ảnh inline (hiển thị ngay trong nội dung), bạn cần thiết lập Content-ID. Sử dụng hook phpmailer_init để thêm attachment với cid, và trong nội dung email dùng thẻ img với src=”cid:your-cid”. Plugin WP Mail SMTP Pro hỗ trợ tính năng này dễ dàng.
Plugin nào tốt nhất để khắc phục lỗi attachment ảnh?
WP Mail SMTP (bản Pro) và Post SMTP là hai plugin hàng đầu, có chức năng debug log và hỗ trợ attachment. Nếu bạn dùng bản miễn phí, kết hợp thêm Easy WP SMTP và Email Log.
Có thể gửi ảnh dung lượng lớn qua email không?
Có, nhưng cần đảm bảo cả hosting và email server đều chấp nhận dung lượng đó. Nên nén ảnh xuống dưới 10MB, và cấu hình post_max_size trong php.ini lên tối thiểu 32MB. Nếu thường xuyên gửi ảnh lớn, hãy dùng dịch vụ lưu trữ đám mây và gửi link thay vì đính kèm.
Tại sao email có ảnh đính kèm nhưng không đến hộp thư đến?
Có thể là do spam filter loại bỏ attachment ảnh vì nghi ngờ phishing. Hãy thiết lập SPF, DKIM, DMARC cho domain gửi, và sử dụng SMTP authenticated thay vì PHP mail() để tăng độ tin cậy. Kiểm tra log từ plugin SMTP hoặc công cụ như Mail Tester.
Kết luận

Lỗi wordpress email image attachment không phải là vấn đề quá phức tạp nếu bạn xác định đúng nguyên nhân. Từ việc kiểm tra giới hạn dung lượng, xung đột plugin, cấu hình PHPMailer đến việc dùng đúng đường dẫn file – mỗi bước đều có thể xử lý bằng cách trên. Quan trọng nhất là luôn bật chế độ debug và ghi log để biết chính xác lỗi. Nếu website của bạn gửi nhiều email quan trọng có đính kèm ảnh, nên đầu tư vào một dịch vụ SMTP chuyên nghiệp như SendGrid hoặc Brevo để đảm bảo đến tay người nhận. Áp dụng các hướng dẫn trong bài viết này, bạn sẽ giải quyết dứt điểm lỗi và tối ưu quy trình gửi email trên WordPress.
- wp_users là gì? Toàn tập về bảng người dùng trong WordPress cho người mới bắt đầu
- Hướng dẫn sửa lỗi Elementor 404 Template: Nguyên nhân và giải pháp chi tiết
- WordPress Contributor Role Là Gì? Hướng Dẫn Chi Tiết Từ A-Z Cho Người Mới
- Hướng dẫn chi tiết cách xóa user WordPress an toàn và triệt để
- Cách khắc phục lỗi theme wordpress js broken hiệu quả và triệt để
















