Contact Form 7附加邮件(2)无法添加附件问题求助
Contact Form 7 附加邮件无法添加附件的原因及解决办法
常见原因
- CF7默认会在主邮件发送后清理临时上传文件,导致附加邮件调用时文件已被删除
- 多数CF7上传插件仅适配主邮件的发送钩子(如
wpcf7_mail_sent),未处理附加邮件的专属钩子(如wpcf7_mail_sent_2) - 附加邮件的附件字段配置存在隐性错误,比如标签拼写不一致,或未使用插件要求的格式
解决步骤
1. 自定义代码保留临时文件并重传
在主题的functions.php中添加以下代码,手动拦截并保留上传文件,再传递给附加邮件:
add_action('wpcf7_before_send_mail', 'cf7_save_attachments_for_second_mail'); function cf7_save_attachments_for_second_mail($contact_form) { $submission = WPCF7_Submission::get_instance(); if ($submission) { $GLOBALS['cf7_uploaded_files'] = $submission->uploaded_files(); } } add_action('wpcf7_mail_sent_2', 'cf7_attach_files_to_second_mail'); function cf7_attach_files_to_second_mail($contact_form) { if (isset($GLOBALS['cf7_uploaded_files'])) { $submission = WPCF7_Submission::get_instance(); if ($submission) { $mail = $contact_form->prop('mail_2'); $attachments = []; foreach ($GLOBALS['cf7_uploaded_files'] as $file_path) { if (file_exists($file_path)) { $attachments[] = $file_path; } } $mail['attachments'] = $attachments; $contact_form->set_prop('mail_2', $mail); // 发送后清理临时文件,避免服务器占用 add_action('shutdown', function() use ($attachments) { foreach ($attachments as $file) { if (file_exists($file)) { unlink($file); } } }); } } }
注意:如果你的附加邮件是「邮件(3)」,请把代码中的mail_2和wpcf7_mail_sent_2替换为mail_3和wpcf7_mail_sent_3。
2. 验证附加邮件的附件配置
进入CF7表单设置的「邮件(2)」标签,确保附件输入框中的标签和主邮件完全一致,比如主邮件用[your-file],附加邮件也必须是同一个标签。部分插件要求使用原始路径格式,可尝试改为[your-file:raw]。
3. 排查插件冲突
暂时禁用除CF7和上传插件外的所有插件,测试附加邮件是否能正常携带附件。如果恢复正常,再逐个启用插件,找出冲突的那个并调整设置或更换插件。
4. 确认插件兼容性
检查上传插件的文档或更新日志,确认是否明确支持CF7的多邮件功能。如果插件未适配,可尝试更新到最新版本,或更换更兼容的同类插件。
内容的提问来源于stack exchange,提问作者lirik-1
相关产品推荐
相关产品推荐

