使用 PHPMailer 可靠发送带附件的邮件(替代原生 mail() 函数)-php教程

php 原生 `mail()` 函数处理附件时易因临时文件丢失、编码错误或 mime 结构不规范导致附件随机缺失;推荐改用成熟稳定的 phpmailer 库,它自动处理边界生成、编码、路径验证与错误反馈,大幅提升附件送达可靠性。

在您提供的代码中,附件失败的根本原因并非逻辑偶然,而是由多个系统级脆弱点共同导致:

  • ❌ $_FILES[“attachment”][“tmp_name”] 未校验上传状态:未检查 $_FILES[“attachment”][“error”] === UPLOAD_ERR_OK,上传失败(如超限、中断)时 $attachment 为空字符串,但后续仍尝试移动/读取,造成静默失败;
  • ❌ 临时文件被提前清理:move_uploaded_file() 缺失,直接使用 $_FILES[“attachment”][“tmp_name”] 依赖 PHP 的临时目录生命周期——该文件可能在脚本结束前已被清理(尤其在高并发或短超时时);
  • ❌ MIME 边界与换行符不兼容:手动拼接的 \n 在 Windows 环境下可能被 SMTP 中继截断,且 Content-Disposition 中换行位置错误(缺少空行),违反 RFC 2046;
  • ❌ 无错误反馈机制:@mail() 屏蔽了所有警告,$mail 返回 true 仅表示“投递到本地 MTA 成功”,不代表邮件真正发出或附件被解析。

✅ 正确解法:弃用原生 mail(),采用 PHPMailer —— 它内置健壮的附件处理流程:

✅ 快速集成步骤(推荐 Composer 方式)

composer require phpmailer/phpmailer

✅ 安全可靠的发送代码(含完整错误处理)

 5 * 1024 * 1024) {
die("不支持的文件类型或大小超出限制");
}

// 3. 移动临时文件到安全位置(避免被清理)
$uploadDir = __DIR__ . '/uploads/';
if (!is_dir($uploadDir)) mkdir($uploadDir, 0755, true);
$safePath = $uploadDir . uniqid() . '_' . basename($file['name']);
if (!move_uploaded_file($file['tmp_name'], $safePath)) {
die("无法保存上传文件");
}

try {
$mail = new PHPMailer(true);
$mail->setFrom($_POST['email'], $_POST['First'] . ' ' . $_POST['Last']);
$mail->addAddress('[email protected]'); // 替换为目标邮箱
$mail->addAttachment($safePath); // 自动处理编码与 MIME

$mail->isHTML(true);
$mail->Subject = 'Mail From Applied Candidate';
$mail->Body = <<<HTML

Candidate Information

Name: {$_POST['First']} {$_POST['Last']}

Email: {$_POST['email']}

立即学习“PHP免费学习笔记(深入)”;

Phone: {$_POST['phone']}

夏夕资源网专注于CMS网站模板,主流语言整站网站源码下载,网站建设相关教程分享,好用的软件素材整合下载,提供一站式便捷自助服务。
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"zy.lucklyus.top",如遇到无法解压的请联系管理员!
夏夕资源网-网站模板_免费源码_资源素材 » 使用 PHPMailer 可靠发送带附件的邮件(替代原生 mail() 函数)-php教程
在线时间:12:00 - 22:00
关注微信公众号:微信公众号
站长邮箱:[email protected]
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4009805+
  • 本周更新: 0+
  • 最后更新: 2026-03-16

本站指数

×
  • 运营天数: 1392+
  • 资源总数: 47989+
  • 用户总数: 1+
  • 今日更新: 0+
  • 访问次数: 4009805+
  • 本周更新: 0+
  • 最后更新: 2026-03-16