如何在同一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
相关产品推荐
相关产品推荐

