Я использую функцию PHP native mail()
для отправки электронных писем HTML и проблемы с форматированием в наиболее распространенном почтовом клиенте пользователей – Outlook 2007 ( в дополнение к некоторым другим почтовым клиентам ) – все теги html отображаются так, что они выглядят как тарабарщину не-веб-разработчику.
Я отправляю HTML-адрес электронной почты так же, как это делает PHP-руководство . Пример:
$message = get_HTML_email_with_valid_formatting(); $headers = "MIME-Version: 1.0\r\n"; $headers .= "Content-Type: text/html; charset=UTF-8\r\n"; $headers .= "From: example.com <info@example.com>\r\n"; $headers .= "Reply-To: donotreply@example.com\r\n"; mail('me@example.com', 'test', $message, $headers);
Поскольку тестирование различных почтовых клиентов затруднено, я подписался на http://litmusapp.com/, поэтому я вижу скриншот писем в 47 разных почтовых клиентах. Большинство из них в порядке (например, gmail, thunderbird, Lotus Notes), но все разные версии Outlook не в порядке.
Чтобы исправить проблему форматирования, я сделал следующее:
$headers = "MIME-Version: 1.0\r\n";
mail. \n
» вместо « \r\n
». Кто-нибудь знает, почему я получаю лучшие результаты с помощью электронных писем HTML, когда я не согласен с руководством?
Информация:
У вас есть 2 решения:
У меня есть образ VMware с стеком LAMP. Чтобы отправить электронное письмо, я, наконец, решил:
Для части sendmail вы можете выполнить следующие действия: http://www.geoffke.be/nieuws/13/
ВАЖНО : Некоторые веб-хосты могут использовать только стабильные пакеты, что означает, что вы можете … Postfix старше 2.9 !!! Пример: http://packages.debian.org/search?keywords=postfix
Если вы используете postfix <2.9, вы можете просто поместить sendmail_path = "tr -d '\r'|sendmail -t -i"
в php.ini.
Я подозреваю, что моя версия Postfix – версия 2.3.3 – 5 лет, и, возможно, она конвертирует LF в CRLF, но, увидев, что у меня уже есть CRLF, я думаю, что отправлял CRCRLF на почтовые клиенты.
К сожалению, я не в состоянии обновить Postfix. Поэтому на данный момент я преобразовал код, чтобы использовать настраиваемую переменную для окончаний строки, чтобы ее можно было легко изменить в будущем:
$eol = "\n"; $message = get_HTML_email_with_valid_formatting(); $headers = "MIME-Version: 1.0".$eol; $headers .= "Content-Type: text/html; charset=UTF-8".$eol; $headers .= "From: example.com <info@example.com>".$eol; $headers .= "Reply-To: donotreply@example.com".$eol; mail('me@example.com', 'test', $message, $headers);
Электронная почта была интерпретирована как text / plain вместо предполагаемого html. Причиной этого является то, что text / html является многочастным подтипом, что требует объявления границ.
В вашем коде отсутствует объявление границы заголовка :
$message = get_HTML_email_with_valid_formatting(); $headers = "MIME-Version: 1.0\r\n"; $headers .= "--$boundary\r\n"."Content-Type: text/html; charset=ISO-8859-1\r\n"; $headers .= "From: example.com <info@example.com>\r\n"; $headers .= "Reply-To: donotreply@example.com\r\n"; mail('me@example.com', 'test', $message, $headers);
Проверьте эту вики о сообщениях MIME & Multipart: http://en.wikipedia.org/wiki/MIME#Multipart_messages