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

求助:如何用PHP的mail函数发送带项目文件夹附件的HTML结构化邮件

PHP mail() 函数实现带附件的HTML邮件修改方案

以下是调整后的完整代码,已支持发送带项目文件夹附件的HTML结构化邮件:

<?php
$mail_to = 'receiver@gmail.com';
$mail_subject = 'Sample Document Name';
// 生成随机MIME边界符,用于分隔邮件不同内容块
$boundary = uniqid('boundary_', true);

// 构建邮件头(转为字符串格式,提升服务器兼容性)
$mail_headers = "MIME-Version: 1.0\r\n";
$mail_headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"\r\n";
$mail_headers .= "From: PROJECT <reply@gmail.com>\r\n";
$mail_headers .= "Reply-To: reply@gmail.com\r\n";

$mail_receiver_name = 'Sample Receiver Name';
$mail_document_type_name = 'Sample Document Type';
$mail_document_subject = 'Sample Subject';
$mail_document_number = 'Sample Document Number';
$mail_document_remarks = 'Sample Remarks';

// 获取HTML模板内容
ob_start();
require_once('mail_template.php');
$html_content = ob_get_contents();
ob_end_clean();

// 附件配置:替换为你的项目文件夹实际路径和文件名
$attachment_path = './documents/sample_file.pdf'; // 示例路径
$attachment_filename = 'sample_document.pdf';

// 检查附件是否存在,避免报错
if (!file_exists($attachment_path)) {
    echo '错误:附件文件不存在';
    exit;
}

// 读取并编码附件内容,符合MIME传输规范
$attachment_content = file_get_contents($attachment_path);
$attachment_content = chunk_split(base64_encode($attachment_content));

// 拼接完整邮件内容
$mail_message = "--$boundary\r\n";
$mail_message .= "Content-Type: text/html; charset=UTF-8\r\n";
$mail_message .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
$mail_message .= $html_content . "\r\n\r\n";

// 添加附件部分
$mail_message .= "--$boundary\r\n";
$mail_message .= "Content-Type: application/octet-stream; name=\"$attachment_filename\"\r\n";
$mail_message .= "Content-Transfer-Encoding: base64\r\n";
$mail_message .= "Content-Disposition: attachment; filename=\"$attachment_filename\"\r\n\r\n";
$mail_message .= $attachment_content . "\r\n\r\n";

// 结束边界符,标记邮件内容结束
$mail_message .= "--$boundary--";

// 发送邮件
$send = mail($mail_to, $mail_subject, $mail_message, $mail_headers);

// 输出准确的发送结果
$output = $send ? '邮件发送成功' : '邮件发送失败';
echo $output;
?>

关键改动说明

  • MIME边界符:新增$boundary作为邮件内容块的分隔标记,确保HTML内容和附件能被邮件客户端正确识别。
  • 邮件头优化:
    • 将Content-Type改为multipart/mixed,支持同时承载HTML内容和附件。
    • 把原数组格式的headers转为字符串,避免部分服务器对数组格式的解析兼容问题。
    • 修正From头格式,补充有效邮箱地址(多数邮件服务器要求From必须包含合法邮箱)。
  • 附件处理:
    • 增加文件存在性检查,提前拦截无效路径的错误。
    • 对附件内容做base64编码并分割成符合规范的行长度,确保邮件传输时不会出现格式问题。
  • 内容拼接:严格按照MIME规范,用边界符分隔HTML内容和附件,分别设置对应的类型与编码。
  • 输出修正:将原逻辑混乱的提示改为直接反馈发送成功/失败。

内容的提问来源于stack exchange,提问作者Mr.Jepoyyy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 18:05:26