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

使用PHPMailer发送邮件附件无法打开的技术求助

问题分析与解决方案

你的代码核心问题是**addStringAttachment的第一个参数传错了**:这个方法需要传入文件的内容字符串,但你传了文件夹路径$folder(也就是upload/),导致附件内容是文件夹路径文本,不是实际文件内容,所以附件打不开。

修复方案一:直接读取上传的临时文件内容(不保存文件到服务器)

修改addStringAttachment相关代码,先读取临时文件的真实内容再传入:

// 读取上传临时文件的内容
$file_content = file_get_contents($_FILES['file']['tmp_name']);
// 传入文件内容,而非文件夹路径
$mail->addStringAttachment($file_content, $file_name, 'base64', PHPMailer::ENCODING_BASE64);

不用硬写固定MIME类型,PHPMailer会自动根据文件名检测对应类型;如果需要手动指定,可替换为对应类型(比如图片用image/jpeg,PDF用application/pdf)。

修复方案二:先保存文件到服务器,再用addAttachment更简单

如果需要把上传文件留存到服务器的upload/文件夹,取消注释move_uploaded_file代码,改用addAttachment(直接传文件路径更直观):

// 先将上传文件保存到服务器指定目录
move_uploaded_file($_FILES['file']['tmp_name'], $folder . $file_name);
// 使用addAttachment传入文件路径
$mail->addAttachment($folder . $file_name, $file_name);

额外建议:添加错误捕获

当前代码启用了PHPMailer的异常抛出但未捕获,发送失败时无法查看错误信息,建议包裹在try-catch块里:

try {
    $mail = new PHPMailer(true);
    // ... 其他SMTP配置、收件人设置等代码 ...
    $mail->send();
    echo "<script>alert('Sent Successfully');document.location.href='mailattach.php';</script>";
} catch (Exception $e) {
    echo "邮件发送失败: {$mail->ErrorInfo}";
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:10:30