Khi xây dựng biểu mẫu liên hệ trên WordPress, một trong những tính năng quan trọng là đính kèm tệp tin. Tuy nhiên, nhiều người gặp phải tình trạng wordpress form email attachment lỗi – không gửi được file đính kèm hoặc email bị thiếu attachment. Nguyên nhân có thể đến từ cấu hình máy chủ, giới hạn kích thước file, hoặc cách thiết lập plugin biểu mẫu. Bài viết này sẽ phân tích chi tiết từng nguyên nhân và cung cấp giải pháp khắc phục triệt để.
Bản chất của lỗi khi gửi file đính kèm qua form WordPress

Khi người dùng tải file lên qua form và gửi, WordPress cần xử lý các bước: nhận file từ HTTP POST, lưu tạm thời vào thư mục upload, rồi đính kèm vào email sử dụng hàm wp_mail() hoặc các thư viện PHP như PHPMailer. Lỗi thường xuất hiện khi một trong các bước này thất bại:
- File không được upload thành công do vượt quá
upload_max_filesizehoặcpost_max_sizetrong PHP. - Plugin form không được cấu hình đúng cách để kích hoạt tính năng attachment.
- Hàm
wp_mail()hoặc mail server (SMTP) không hỗ trợ đính kèm lớn hoặc định dạng file nhất định. - Quyền thư mục upload không cho phép ghi file tạm.
Các loại lỗi attachment thường gặp
| Loại lỗi | Biểu hiện | Nguyên nhân chính |
|---|---|---|
| File đính kèm bị thiếu trong email nhận được | Email đến nhưng không có file, chỉ có nội dung text | Plugin không gắn attachment đúng cách hoặc bị lỗi hook |
| Email không gửi được khi có file đính kèm | Form báo lỗi “Không thể gửi email” hoặc không có phản hồi | Giới hạn kích thước file, lỗi SMTP, hoặc lỗi quyền thư mục |
| Lỗi upload file từ phía người dùng | Hiển thị thông báo “File vượt quá dung lượng cho phép” | Cấu hình PHP và WordPress chưa đồng bộ |
Nguyên nhân chi tiết khiến WordPress form email attachment lỗi

1. Giới hạn upload file từ cấu hình PHP
PHP có các tham số quyết định dung lượng tối đa cho phép upload. Nếu file đính kèm vượt quá upload_max_filesize (thường mặc định 2M hoặc 8M) hoặc tổng dữ liệu POST vượt quá post_max_size, quá trình upload sẽ thất bại. WordPress cũng có riêng tham số wp_max_upload_size() lấy từ PHP.
Kiểm tra giá trị hiện tại bằng cách vào Tools → Site Health → Info → Server hoặc xem file phpinfo(). Nếu cần tăng, bạn chỉnh sửa file php.ini hoặc .htaccess:
upload_max_filesize = 64M post_max_size = 128M max_execution_time = 300
Sau khi thay đổi, khởi động lại web server (Apache/Nginx) và kiểm tra lại.
2. Cấu hình plugin form không kích hoạt attachment
Nhiều plugin form yêu cầu người dùng chọn trường file và bật tùy chọn “Include attachment” trong settings của form. Ví dụ với Contact Form 7, bạn cần thêm shortcode [file your-file] và trong phần Mail phải kích hoạt checkbox “Attach the uploaded files” cho file đó. Nếu quên bước này, email sẽ được gửi nhưng không có file.
Kiểm tra lại từng form của plugin Gravity Forms, WPForms, Elementor Pro, hoặc Formidable Forms – mỗi plugin đều có tùy chọn riêng. Đảm bảo rằng file đã được map đúng với trường trong phần cấu hình email.
3. Vấn đề với hàm wp_mail() và mail server
WordPress mặc định sử dụng hàm wp_mail() dựa trên PHP mail(). Hàm này thường không gửi được email có attachment lớn hoặc bị chặn bởi host do thiếu xác thực. Giải pháp là chuyển sang SMTP.
Cài đặt plugin SMTP như WP Mail SMTP, Easy WP SMTP hoặc Post SMTP. Cấu hình với dịch vụ email (Gmail, SendGrid, Mailgun, SMTP hosting). Việc này giúp gửi email qua kết nối an toàn, hỗ trợ attachment kích thước lớn hơn và ít bị rơi vào spam.
4. Quyền thư mục upload và bộ nhớ tạm
File tải lên thường được lưu tạm vào thư mục wp-content/uploads/ hoặc /tmp của server. Nếu thư mục này không có quyền ghi (permission 755 hoặc 775 cho người dùng web server), quá trình upload sẽ thất bại. Kiểm tra bằng cách tạo một file tạm thông qua Media Library – nếu không được, hãy sửa quyền qua FTP hoặc File Manager.
5. Giới hạn kích thước file trong plugin
Một số plugin form cho phép đặt giới hạn dung lượng cho từng trường file. Ví dụ Contact Form 7 có thể giới hạn ở mức 2MB qua thuộc tính filetypes không hỗ trợ giới hạn kích thước, nhưng có thể dùng bộ lọc wpcf7_upload_max_size. Nếu bạn không set đúng, file lớn sẽ bị từ chối.
Các plugin thường dùng và cách fix lỗi attachment
Contact Form 7
Khi gặp lỗi, hãy kiểm tra:
- Trong Tab Mail, mục “Attachments” – chọn “File uploads” và chọn trường file tương ứng.
- Sử dụng filter để tăng giới hạn: thêm vào
functions.php:add_filter( 'wpcf7_upload_max_size', function() { return 10 1024 1024; } ); - Cài thêm plugin “Flamingo” để lưu trữ file tạm trong trường hợp email không gửi được.
WPForms
Vào WPForms → Settings → Email: bật “Send Email Using SMTP”. Tại form cụ thể, thêm trường File Upload, trong Advanced Options đặt “Max File Size” và “Allowed File Types”. Đảm bảo trong Notifications chọn “Include File Uploads in Email Body” hoặc “Attach File”.
Gravity Forms
Vào Form Settings → Confirmation → Email Notification: thêm định dạng “{file_upload_field}” để lấy file. Gravity Forms có tính năng “Enable file uploads” trong Advanced Tab. Nếu gặp lỗi, cài thêm plugin “Gravity Forms SMTP” hoặc cấu hình SMTP toàn site.
Hướng dẫn khắc phục từng bước

- Xác định lỗi cụ thể: Kích hoạt WP_DEBUG trong wp-config.php để xem thông báo lỗi khi gửi form.
- Kiểm tra giới hạn PHP: Dùng plugin “WP Health” hoặc tạo file thông tin.
- Nâng giới hạn: Chỉnh sửa
php.inihoặc thêm vào.htaccesscác dòng tăng upload_max_filesize, post_max_size. - Cấu hình SMTP: Cài plugin SMTP, nhập thông số máy chủ gửi mail. Thử gửi email test có attachment qua plugin để kiểm tra.
- Kiểm tra quyền thư mục: Đảm bảo thư mục uploads có quyền 755, không bị chmod 644.
- Xóa cache plugin: Nếu dùng cache như W3 Total Cache, hãy xóa toàn bộ cache.
- Kiểm tra conflict theme/plugin: Tạm thời chuyển sang theme mặc định và tắt tuần tự các plugin để tìm nguyên nhân.
Sai lầm thường gặp khi xử lý lỗi attachment
- Chỉ tăng upload_max_filesize mà quên post_max_size: post_max_size phải lớn hơn upload_max_filesize để chứa thêm dữ liệu form.
- Không kiểm tra plugin SMTP: Nhiều người chỉnh PHP mà quên xử lý mail server, dẫn đến email vẫn không gửi được.
- Đặt nhầm path trong attachment trường file: Một số plugin yêu cầu dùng slug của trường, không phải tên hiển thị.
- Không kiểm tra định dạng file: Một số mail server chặn file.exe,.zip hoặc yêu cầu mã hóa.
Lưu ý quan trọng để tránh lỗi attachment

Luôn đặt giới hạn file hợp lý (dưới 25MB) để tránh quá tải server. Sử dụng dịch vụ lưu trữ file bên ngoài nếu cần dung lượng lớn. Bật logging của email plugin để theo dõi lỗi. Đảm bảo PHP memory_limit tối thiểu 128MB. Cập nhật plugin form lên phiên bản mới nhất.
Câu hỏi thường gặp
Tại sao email được gửi nhưng không có file đính kèm?
Nguyên nhân là plugin form chưa được cấu hình để đính kèm file. Kiểm tra trong phần cài đặt email của form, đảm bảo
Chỉnh sửa file php.ini (hoặc dùng Plugin như WP File Upload) để tăng upload_max_filesize và post_max_size. Sau đó vào plugin form để set giới hạn phù hợp.
Email có attachment bị vào spam, giải quyết thế nào?
Sử dụng plugin SMTP để gửi email qua dịch vụ có uy tín (Gmail, SendGrid). Kiểm tra DKIM/SPF cho domain. Tránh gửi file nặng >10MB vì dễ bị đánh dấu spam.
Có plugin nào hỗ trợ gửi attachment qua form dễ dàng không?
Các plugin hàng đầu như Contact Form 7, WPForms, Gravity Forms, Formidable Forms đều hỗ trợ file đính kèm. Chọn plugin phù hợp với nhu cầu và phiên bản miễn phí đủ dùng.
Kết luận

Xử lý wordpress form email attachment lỗi không phải là vấn đề quá phức tạp nếu bạn hiểu rõ các thành phần liên quan: cấu hình PHP, plugin form, mail server và quyền thư mục. Bằng cách kiểm tra từng nguyên nhân theo thứ tự ưu tiên, hầu hết trường hợp đều được khắc phục nhanh chóng. Hãy luôn duy trì bảo mật, cập nhật plugin và sử dụng SMTP để đảm bảo email đến nơi an toàn.
- WordPress Filter Hook là gì? Hướng dẫn toàn diện từ cơ bản đến nâng cao cho lập trình viên
- Plugin Membership Lỗi Thanh Toán: Nguyên Nhân, Cách Khắc Phục và Phòng Tránh Toàn Diện
- Plugin Affiliate Lỗi Link Affiliate: Nguyên Nhân, Cách Khắc Phục và Phòng Tránh Toàn Diện
- Khắc phục lỗi WordPress Uploads Directory Missing – Hướng dẫn chi tiết từ A đến Z
- WooCommerce Headless là gì? Giải pháp tách biệt Frontend và Backend cho cửa hàng WordPress
















