我的附带文件的电子邮件出现问题。 标题,包括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被解析:)
知道什么可以破坏标题? 谢谢!
答案 0 :(得分:2)
标题显示您的变量$header
以内容--38fd5b8f9b812b5db3ec89cd01b6bd9c
开头,但不正确...... 标题不应以边界开头,只是正文(所以第一个条目应该是MIME-Version: 1.0
)。很难说这发生了什么,特别是考虑到你删除了我添加的代码格式修复但是切换了行:
$header.= "MIME-Version: 1.0\r\n";
要:
$header= "MIME-Version: 1.0\r\n";
应该阻止任何先前的$header
定义在那里爬行。