邮件标题显示在邮件正文中,没有文件,没有 HTML


mail headers shown in mail body, no file, no html

我在处理带有附件的电子邮件时遇到问题。标头,包括 html(解析为文本)和文件(也解析为文本),它们都在标头中,显示为邮件正文。这段代码曾经有效,但我不知道发生了什么变化。

有一个随机因素,有时邮件确实正确到达,但我似乎无法弄清楚会破坏邮件/使其工作的模式(假设有)。

这是我生成邮件的代码:

$file = $path.$filename;
$file_size = filesize($file);
$handle = fopen($file, "r");
$content = fread($handle, $file_size);
fclose($handle);
$content = chunk_split(base64_encode($content));
$uid = md5(uniqid(time()));
$name = basename($file);
$header .= "MIME-Version: 1.0'r'n";
$header .= "Content-Type: multipart/mixed; boundary='"".$uid."'"'r'n'r'n";
$header .= "This is a multi-part message in MIME format.'r'n";
$header .= "--".$uid."'r'n";
$header .= "Content-Type: text/html; charset=utf-8'r'n";
$header .= "Content-Transfer-Encoding: 7bit'r'n'r'n";
$header .= $message."'r'n'r'n";
$header .= "--".$uid."'r'n";
$header .= "Content-Type: application/octet-stream; name='"".$filename."'"'r'n"; 
// use different content types here
$header .= "Content-Transfer-Encoding: base64'r'n";
$header .= "Content-Disposition: attachment; filename='"".$filename."'"'r'n'r'n";
$header .= $content."'r'n'r'n";
$header .= "--".$uid."--";
$mailto = 'yanivshimony@gmail.com';
if (mail($mailto, $subject, "", $header)) {
    echo "1"; // or use booleans here
} else {
    echo "mail send ... ERROR!";
}

我尝试删除所有标题,只剩下以下标题使其工作:

$header .= "Content-Type: text/html; charset=utf-8'r'n";
$header .= "Content-Transfer-Encoding: 7bit'r'n'r'n";
$header .= $message."'r'n'r'n";

所以它毫无用处,因为它只是一个普通的 HTML 电子邮件,没有多部分/附件/任何东西 - 但 HTML 被解析:)

知道什么会破坏标题吗?谢谢!

标题显示您的变量$header以内容--38fd5b8f9b812b5db3ec89cd01b6bd9c开头,这是不正确的......标头不应以边界开头,而应以正文开头(因此第一个条目应MIME-Version: 1.0)。 很难说这是在哪里发生的,特别是考虑到您删除了我添加的代码格式修复程序,但切换了行:

$header.= "MIME-Version: 1.0'r'n";

自:

$header= "MIME-Version: 1.0'r'n";

应该阻止任何先前对$header的定义蔓延到那里。