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

如何将服务器wp-regpdf文件夹中的PDF通过SMTP邮件作为附件发送

问题分析与解决方案

你的代码存在两个核心问题导致PDF附件无法正常发送,以下是具体修复步骤:

1. 变量作用域问题

你在函数外部定义的$path变量,无法在smtp_mailer函数内部直接访问,导致AddAttachment传入的是未定义的无效值。解决方式是将$path作为参数传递给函数。

2. 文件路径可靠性问题

使用相对路径可能因脚本执行目录差异导致找不到文件,建议改用服务器绝对路径,通过$_SERVER['DOCUMENT_ROOT']拼接,确保指向Public_htm下的wp-regpdf文件夹。

修复后的完整代码

<?php
session_start();
if ($_SESSION['email'] == '' || $_SESSION['Uniqueid'] == '') {
    session_destroy();
    echo '<script>window.location.href="wp-destroy.php"</script>';
}
?>
<?php
$Uniqueid = $_SESSION['Uniqueid'];
// 拼接服务器绝对路径,避免相对路径出错
$path = $_SERVER['DOCUMENT_ROOT'] . '/wp-regpdf/' . $Uniqueid . '.pdf';
$email = $_SESSION['email'];
include ('smtp/PHPMailerAutoload.php');
// 将$path作为参数传入邮件发送函数
echo smtp_mailer($email, 'Testing Mail', '请查收你的工资单附件', $path);

function smtp_mailer($to, $subject, $msg, $path) {
    $mail = new PHPMailer();
    $mail->IsSMTP();
    $mail->SMTPAuth = true;
    $mail->SMTPSecure = 'tls';
    $mail->Host = "smtppro.zoho.in";
    $mail->Port = 587;
    $mail->IsHTML(true);
    $mail->CharSet = 'UTF-8';
    // 开启调试模式,方便排查问题(测试完成后可注释)
    $mail->SMTPDebug = 2;
    $mail->Username = "你的Zoho邮箱账号";
    $mail->Password = "你的Zoho邮箱密码";
    $mail->SetFrom("support@team.tech");
    $mail->addCC('info@team.com');
    $mail->Subject = $subject;
    $mail->Body = $msg;
    
    // 先验证文件是否存在且可读
    if (file_exists($path) && is_readable($path)) {
        $mail->AddAttachment($path);
    } else {
        echo "附件文件不存在或无读取权限:" . $path;
        return false;
    }
    
    $mail->AddAddress($to);
    $mail->SMTPOptions = array(
        'ssl' => array(
            'verify_peer' => false,
            'verify_peer_name' => false,
            'allow_self_signed' => false
        )
    );
    if ($mail->Send()) {
        echo '<script>window.location.href="thankyou.php"</script>';
    } else {
        echo $mail->ErrorInfo;
    }
}
?>

额外排查建议

  • 检查wp-regpdf文件夹及PDF文件的权限,确保服务器进程(如www-data)拥有读取权限
  • 确认Zoho邮箱的SMTP账号密码正确,且已开启SMTP服务
  • 保留$mail->SMTPDebug = 2,查看详细SMTP交互日志,可快速定位发送失败的具体原因

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.20 20:42:03