Я использую функцию для отправки писем в формате UTF8.Поскольку по крайней мере у одного получателя возникли проблемы с электронными письмами, отправленными моей функцией (не UTF8, поэтому специальные символы повреждены; некоторые заголовки писем появляются в теле), мне интересно, нужно ли ставить еще один разрыв строки в конце строки заголовка:
function mail_utf8($to, $subject = "(No subject)", $message = "", $header = "")
{
$header_ = 'MIME-Version: 1.0'."\r\n".'Content-type: text/plain; charset=UTF-8'."\r\n";
$header_ .= "From: my@mail.com"; //Should be optional...
if (!empty($header)) $header_ .= "\r\n".$header;
$out = mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_);
return $out;
}
Так что же правильно - mail_utf8("x@y.z", "", "blah", "")
или mail_utf8("x@y.z", "", "blah", "\r\n")
?
Редактировать : очевидный ресурс для такого рода вопросов - www.php.net/mail - использует такой разрыв строки только в примере # 4, в отличие от # 2.
Edit2 : Итак, вот текущая версия.См. Комментарии для дальнейшей информации.
function mail_utf8($to, $subject = "(No subject)", $message = "", $header = "")
{
$linebreak = PHP_EOL; //Seems to work everywhere, including IncrediMail
$linebreak = "\n"; //Debug
$header_ = 'MIME-Version: 1.0'.$linebreak.'Content-type: text/plain; charset=UTF-8'.$linebreak;
$header_ .= "From: my@mail.com".$linebreak;
if (!empty($header)) $header_ .= $header.$linebreak; //Last line break !?
$out = mail($to, '=?UTF-8?B?'.base64_encode($subject).'?=', $message, $header_);
return $out;
}