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

如何为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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 03:42:23