如何为PHP批量邮件脚本添加附件发送功能?
嘿,别担心!作为新手能自己折腾批量邮件脚本已经超棒了,添加附件功能其实没你想的那么复杂,咱们一步步来搞定~
第一步:修改HTML表单
首先,你的表单必须加上enctype="multipart/form-data"属性(这是上传文件的必要条件),然后在合适的位置添加上传附件的输入框。比如在你提供的Reply to输入框附近,加上这段代码:
<td align="right" height="17" style="color: #000"> <span class="texto">Attachment :</span> </td> <td width="65%" height="17" style="color: #000"> <input name="attachment" type="file" class="form-control"> </td>
同时,别忘了给你的<form>标签加上enctype属性,比如:
<form method="post" action="你的PHP处理脚本路径" enctype="multipart/form-data">
第二步:修改PHP处理逻辑
PHP自带的mail()函数默认不直接支持附件,所以我们需要手动构造带MIME格式的邮件内容。下面是核心的处理代码,你可以结合自己的批量发送逻辑调整:
// 获取表单里的回复邮箱 $replyto = $_POST['replyto']; // 这里补充你自己的其他变量:收件人列表、邮件主题、正文内容等 // 处理上传的附件 $attachment = $_FILES['attachment']; // 先检查附件是否上传成功 if ($attachment['error'] === UPLOAD_ERR_OK) { $file_name = $attachment['name']; // 附件原文件名 $file_type = $attachment['type']; // 文件MIME类型 $file_tmp_path = $attachment['tmp_name']; // 服务器临时文件路径 // 读取文件内容并转成base64编码(邮件附件要求的格式) $file_content = file_get_contents($file_tmp_path); $file_content = chunk_split(base64_encode($file_content)); // 生成一个随机的边界字符串,用来区分邮件的不同部分(正文和附件) $boundary = md5(time()); // 构造邮件头部信息 $headers = "From: 你的发件人邮箱 <your-email@example.com>\r\n"; $headers .= "Reply-To: $replyto\r\n"; $headers .= "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n"; // 构造邮件正文部分 $message = "--$boundary\r\n"; $message .= "Content-Type: text/html; charset=utf-8\r\n"; // 如果是纯文本邮件就改成text/plain $message .= "Content-Transfer-Encoding: 7bit\r\n\r\n"; $message .= "这里替换成你的邮件正文内容,可以是HTML或纯文本\r\n\r\n"; // 构造附件部分 $message .= "--$boundary\r\n"; $message .= "Content-Type: $file_type; name=\"$file_name\"\r\n"; $message .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n"; $message .= "Content-Transfer-Encoding: base64\r\n\r\n"; $message .= $file_content . "\r\n\r\n"; // 结束邮件边界 $message .= "--$boundary--"; // 批量发送的话,这里循环你的收件人列表即可 foreach ($your_recipient_list as $to) { $subject = "你的邮件主题"; // 发送邮件 $send_result = mail($to, $subject, $message, $headers); // 可以在这里添加发送结果的判断,比如记录日志 } } else { // 附件上传失败的提示,方便调试 echo "附件上传出错啦,错误码:" . $attachment['error']; }
给新手的小提示
- 如果你要传大文件,记得检查PHP配置里的
upload_max_filesize和post_max_size,确保它们的值足够大(可以在php.ini里修改,或者用ini_set()临时调整)。 - 批量发送时,不要一次性发太多,避免被邮件服务器判定为垃圾邮件,最好加个小延迟(比如
sleep(1))。 - 要是觉得手动构造MIME太麻烦,后期可以试试
PHPMailer类,它封装了很多邮件功能,包括附件、SMTP发送,用起来更省心~
内容的提问来源于stack exchange,提问作者ahmedreda bounouala
相关产品推荐
相关产品推荐

