2012-04-30 3 views
2

У меня возникли проблемы с моими письмами с прикрепленным файлом. Заголовки, включая 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 = '[email protected]'; 
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"; 

так что его вполне usless , как его обычный нормальный html-адрес электронной почты, без использования multipart/attachment/anything, но HTML разобран :)

Любая идея, что может сломать заголовки ?? Спасибо!

ответ

2

заголовки показать свои переменные $header начинается с содержанием --38fd5b8f9b812b5db3ec89cd01b6bd9c, который не прав ... заголовки не должны начинаться с границы, только тела (поэтому первая запись должна быть MIME-Version: 1.0). Трудно сказать, где это происходит, особенно учитывая вы удалили форматирование кода исправления я добавил, но переключение линии:

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

To:

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

Если остановить любое предыдущее определение $header от ползучей там ,

+0

ОК, теперь это неловко ... но вы правы :). Я попытался добавить $ headers = '';. и я попытался сделать unset ($ headers), и они оба не работали, поэтому я даже не подумал об этом. Большое спасибо, это действительно сработало - я удалил '.' от. = и все хорошо сейчас. Я больше никогда не буду недооценивать это. еще раз... – Yanipan

Смежные вопросы