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 для получения дополнительной информации и информации о «укладывании» мим-контента.

Другие вопросы по тегам