You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为Contact Form 7自动回复添加PDF附件?

解决Contact Form 7自动回复添加PDF附件的问题

看起来你在给CF7的自动回复(Mail 2)加PDF附件时踩了路径验证的坑,自定义钩子代码也没生效——我之前也碰到过类似情况,给你梳理下靠谱的解决步骤:

一、先排查Mail 2附件字段的问题

你说路径正确却提示错误,大概率是相对路径的锅:CF7的附件字段只认服务器绝对路径,不能用/wp-content/这种相对路径,也不能用网站URL。比如你应该填:
/home/yourdomain/public/wp-content/uploads/2024/05/your-file.pdf
或者用WordPress常量动态生成(如果主机允许在表单字段执行PHP):
<?php echo WP_CONTENT_DIR; ?>/uploads/2024/05/your-file.pdf

另外还要检查两个关键点:

  • PDF文件权限:确保服务器的web用户(比如www-data)有读取权限,权限设为644一般没问题
  • 文件存在性:通过FTP或主机文件管理器确认路径和文件名完全一致(Linux服务器区分大小写,别写错字母)

二、修正自定义钩子代码(推荐用这种方式,更灵活)

你的钩子代码没生效,可能是没正确修改邮件对象,或者路径构建错误。试试这个完善后的版本:

add_action( 'wpcf7_before_send_mail', 'cf7_add_pdf_attachment_to_autoresponder' );
function cf7_add_pdf_attachment_to_autoresponder( $contact_form ) {
    // 只针对ID为872的表单执行
    if ( $contact_form->id() !== 872 ) {
        return;
    }

    // 获取自动回复(Mail 2)的邮件对象
    $mail = $contact_form->prop( 'mail_2' );

    // 构建PDF的绝对路径(替换成你的实际文件路径)
    $pdf_path = WP_CONTENT_DIR . '/uploads/2024/05/your-document.pdf';

    // 检查文件是否存在且可读,避免报错
    if ( ! file_exists( $pdf_path ) || ! is_readable( $pdf_path ) ) {
        error_log( 'CF7 PDF附件错误:文件不存在或不可读 - ' . $pdf_path );
        return;
    }

    // 添加附件到Mail 2
    if ( empty( $mail['attachments'] ) ) {
        $mail['attachments'] = array( $pdf_path );
    } else {
        // 已有附件时追加,不覆盖原有内容
        $mail['attachments'][] = $pdf_path;
    }

    // 更新邮件对象,确保附件生效
    $contact_form->set_prop( 'mail_2', $mail );
}

代码关键说明:

  1. 用$contact_form->id()代替$cf7->id——CF7新版本里,对象方法是id()而非直接调用属性
  2. 用WP_CONTENT_DIR常量构建绝对路径,避免主机环境差异导致的路径错误
  3. 增加了文件存在性检查和错误日志,方便后续排查问题
  4. 正确更新Mail 2的邮件对象,确保附件被添加到给用户的自动回复里

三、额外注意事项

  • 测试时用真实邮箱接收,部分邮件服务商可能会拦截带附件的邮件,或归为垃圾邮件
  • 确保WordPress和CF7都是最新版本,旧版本可能存在钩子兼容性问题
  • 如果是用户上传的动态文件,逻辑会不同,但你这里是固定PDF,上面的代码完全适用

内容的提问来源于stack exchange,提问作者eMikkelsen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:56:55