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

如何在现有PHP邮件代码中添加附件发送功能?

在现有PHP邮件代码中添加附件发送功能的修改方案

你只需修改邮件头和邮件内容的构建逻辑,无需新增独立代码块,具体修改如下:

关键修改点说明

  1. 生成多部分邮件边界字符串,用于区分邮件的HTML内容和附件部分
  2. 将邮件的Content-Type从纯HTML改为multipart/mixed,并绑定边界
  3. 重构邮件内容,把原有的HTML消息和附件内容按多部分格式拼接
  4. 读取已上传的文件内容,用Base64编码后嵌入邮件附件部分

修改后的完整代码

<?php
if(isset($_POST["submit"])){
    $file_name = $_FILES['fileToUpload']['name'];
    $file_name1 = rand().$file_name;
    $file_tmp = $_FILES['fileToUpload']['tmp_name'];
    
    move_uploaded_file($file_tmp,"cv/".$file_name1);
    
    $conn = mysqli_connect("localhost", "", "", "");
    
    if($conn === false){
        die("ERROR: Could not connect. "
            . mysqli_connect_error());
    }
    
    $CV = $_REQUEST['fileToUpload'];
    $Name = $_REQUEST['name'];
    $Email = $_REQUEST['email'];
    $Mobile = $_REQUEST['mobile'];
    $CGPA = $_REQUEST['cgpa'];
    $RegNo = $_REQUEST['regno'];
    $Position = $_REQUEST['position'];
    $Why = $_REQUEST['why'];
    
    $sql = "INSERT INTO `ExecutiveBody`(`ID`, `CV`, `Name`, `Email`, `Mobile`, `CGPA`, `RegNo`, `Position`, `Why`) VALUES ('','$file_name1','$Name','$Email','$Mobile','$CGPA','$RegNo','$Position','$Why')";
    
    if(mysqli_query($conn, $sql)){
        echo "<script>alert('Thanks For Your Interest. Check Your Email For Confirmation.');</script>";
    } else{
        echo "ERROR: Hush! Sorry $sql. "
            . mysqli_error($conn);
    }
    
    $to = "mail@hotmail.com"; // 接收方邮箱
    $from = $_REQUEST['email']; // 发送方邮箱
    $name = $_REQUEST['name'];
    $mobile = $_REQUEST['mobile'];
    $cgpa = $_REQUEST['cgpa'];
    $regno = $_REQUEST['regno'];
    $position = $_REQUEST['position'];
    $why = $_REQUEST['why'];
    
    $subject = "Executive Body | Application";
    $subject2 = "Copy Of Your Executive Body Application Submission";
    $html_message = "<b>Name: </b>" . $name . "<br><br>" . "<b>Email: </b>" . $from . "<br><br>" ."<b>Mobile: </b>" .  $mobile . "<br><br>" . "<b>CGPA: </b>" . $cgpa . "<br><br>" . "<b>Reg No: </b>" . $regno . "<br><br>" . "<b>Position: </b>" . $position . "<br><br>" . "<b>Why You Want To Be Part Of Society?: </b><br><br>" . $why;

    // -------------------------- 新增/修改的邮件附件逻辑 --------------------------
    // 生成多部分邮件边界
    $boundary = md5(time());
    
    // 构建邮件头
    $headers = "MIME-Version: 1.0\r\n";
    $headers .= "From: " . $from . "\r\n";
    $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
    
    // 构建邮件内容:HTML部分
    $message = "--$boundary\r\n";
    $message .= "Content-Type: text/html; charset=ISO-8859-1\r\n";
    $message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
    $message .= $html_message . "\r\n\r\n";
    
    // 添加附件部分
    $file_path = "cv/" . $file_name1;
    if(file_exists($file_path)){
        $file_content = file_get_contents($file_path);
        $file_content = chunk_split(base64_encode($file_content));
        
        $message .= "--$boundary\r\n";
        $message .= "Content-Type: application/octet-stream; name=\"$file_name\"\r\n";
        $message .= "Content-Transfer-Encoding: base64\r\n";
        $message .= "Content-Disposition: attachment; filename=\"$file_name\"\r\n\r\n";
        $message .= $file_content . "\r\n\r\n";
    }
    // 结束边界
    $message .= "--$boundary--";
    // -------------------------- 邮件附件逻辑结束 --------------------------
    
    // 发送邮件
    mail($to, $subject, $message, $headers);
    
    // 关闭数据库连接
    mysqli_close($conn);
}
?>

额外注意事项

  • 确保cv/目录有足够的读写权限,否则文件无法读取和嵌入邮件
  • 原代码中的$cv = $_REQUEST['cv'];未实际使用,可以直接删除
  • 如果需要给发送方也发送带附件的确认邮件,只需复制上述邮件构建逻辑,把$to改成$from,$subject换成$subject2即可

内容的提问来源于stack exchange,提问作者Wasi Ur Rehman Qamar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 08:25:21