Mulitpart MIME текст электронной почты и HTML показывает обе части
Я бился головой об этом некоторое время и не смог найти каких-либо полезных статей по моим вопросам. Я пишу сайт PHP, используя встроенную почтовую функцию для некоторых быстрых электронных писем с подтверждением. Я понимаю, что существует довольно много предубеждений против встроенной почтовой функции, но до сих пор она работала хорошо для меня, и я хотел бы иметь возможность продолжать ее использовать. Когда я отправляю просто текстовое электронное письмо, все прекрасно работает, как будто я отправляю только HTML-письмо. Однако, если я попытаюсь составить текстовое /HTML электронное письмо, обе версии появятся в моем почтовом клиенте (пробовал thunderbird и gmail). Я надеюсь, что кто-то здесь может помочь мне понять, что я делаю неправильно (кроме использования mail() вместо PHPMail). Вот мой фрагмент кода
$uid = md5(uniqid(time()));
$strSubject = "Confirmation for $strEventName on $strEventDate";
$strHTMLMsg = "<h1><center>You are confirmed for the following event:</center></h1><br>\n$strEvenDetails";
$strMsg = strip_tags($strHTMLMsg);
$toEmail = "\"$strName\" <$strEmail>";
$header = "$FromEmail\n";
$header .= "MIME-Version: 1.0\n";
$header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\n\n";
$header .= "Content-Transfer-Encoding: 7bit\n";
$header .= "This is a MIME encoded message.\n\n";
$header .= "--".$uid."\n";
$header .= "Content-type:text/plain; charset=UTF-8\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";
$header .= $strMsg."\n\n";
$header .= "--".$uid."\n";
$header .= "Content-type:text/HTML; charset=UTF-8\n";
$header .= "Content-Transfer-Encoding: 7bit\n\n";
$header .= $strHTMLMsg."\n\n";
$header .= "--".$uid."\n";
$header .= "Content-Type: application/ics; name=\"".$strFileName."\"; method=PUBLISH; charset=UTF-8\n";
$header .= "Content-Transfer-Encoding: 7bit\n";
$header .= "Content-Disposition: attachment; filename=\"".$strFileName."\"\n\n";
$header .= $strICSEvent."\n\n";
$header .= "--".$uid."\n";
$bSuccess = mail($toEmail,$strSubject,"",$header);
1 ответ
Necrobump, но я пришел сюда после того, как погуглил, поэтому для других с теми же условиями поиска: multipart/mixed подразумевает, что вы будете просматривать все части. Как для HTML, так и для текстовой части, где должна быть видна только одна часть, вместо этого используйте multipart/alternative. Последняя часть получает наивысший приоритет.
Также см. Mail multipart/alternative vs multipart/mixed для получения дополнительной информации и информации о «укладывании» мим-контента.