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

如何在同一PHP页面中使用PHPMailer添加邮件附件?

实现同一页面内PHPMailer添加多文件附件

我来帮你搞定这个问题!你的表单已经正确配置了enctype="multipart/form-data"和多文件上传属性,不用把文件存到磁盘,直接利用PHP上传的临时文件就能给PHPMailer添加附件。只需要在你的PHP处理逻辑里加上这段遍历上传文件并添加附件的代码就行:

修改后的PHP代码片段

if (isset($_POST['btnSend'])) {
    $mail = new mymailer();
    include DOC_ROOT . 'include/contact-email-template.php';
    
    // --- 新增:处理上传的文件附件 ---
    // 检查是否有文件上传
    if (!empty($_FILES['files']['name'][0])) {
        // 遍历所有上传的文件
        foreach ($_FILES['files']['tmp_name'] as $key => $tmpFilePath) {
            // 检查当前文件是否上传成功(error=0表示成功)
            if ($_FILES['files']['error'][$key] === UPLOAD_ERR_OK) {
                $fileName = $_FILES['files']['name'][$key];
                // 使用PHPMailer的addAttachment方法添加附件
                // 参数1:临时文件路径,参数2:邮件中显示的文件名
                $mail->addAttachment($tmpFilePath, $fileName);
                
                // 可选:添加文件类型验证,比如只允许图片、PDF等
                // $allowedTypes = ['image/jpeg', 'image/png', 'application/pdf'];
                // $fileType = $_FILES['files']['type'][$key];
                // if (in_array($fileType, $allowedTypes)) {
                //     $mail->addAttachment($tmpFilePath, $fileName);
                // }
            }
        }
    }
    // --- 附件处理结束 ---
    
    $mailArray = array("my-email-address");
    $subject = "Contact Form";
    $from = $email;
    $mail->sendMail($from, $mailArray, $subject, $admin_template);
    
    $emailsent = 1;
    $mod_email = "Success";
    
    /* redirect to home after success */
    if ($emailsent == 1) {
        unset($_POST['firstname']);
        unset($_POST['lastname']);
        unset($_POST['email']);
        unset($_POST['phone']);
        unset($_POST['message']);
        $mod_email = "Show";
    }
}

关键说明

  • 因为你的文件输入是name="files[]",所以$_FILES['files']是一个多维数组,每个文件的信息会按索引存放在tmp_name、name、error等子数组里。
  • PHP会自动把上传的文件存到服务器的临时目录(tmp_name对应的路径),PHPMailer可以直接读取这个临时文件,不需要你手动保存到磁盘,邮件发送完成后PHP会自动清理临时文件。
  • 建议加上安全验证:比如限制文件大小(通过$_FILES['files']['size'][$key])、验证文件类型(检查MIME类型或扩展名),防止恶意文件上传。
  • 确保你的PHP配置满足上传需求:检查php.ini里的upload_max_filesize、post_max_size参数,数值要大于你允许上传的单文件大小和总文件大小。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:56:06