使用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
相关产品推荐
相关产品推荐

