Интересно, может ли кто-нибудь помочь.
Я унаследовал скрипт, который отправляет некоторый контент на трех языках (все на одном и том же содержимом – повторяется), однако, когда они получены, символы содержимого не работают, поскольку я предполагаю, что это проблема UTF-8.
Я прав, все, что мне нужно сделать, это изменить часть charset на utf-8 или что-то еще нужно изменить, как 7-битная часть?
вы можете увидеть, где я вставил одну ссылку UTF-8 (еще не протестирован)
было что-то здесь http://bitprison.net/php_mail_utf-8_subject_and_message, которое, похоже, ссылается на базовую кодировку, но я не уверен, что мне нужно это здесь?
благодаря
// Contruct message body. $body = ""; // Add message for non-mime clients. $body .= "This is a multi-part message in MIME format.\n"; // Add text body. $body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $textContent; // Add HTML body. $body .= "\n--$boundary\nContent-Type: text/html; charset=ISO-8859-1; format=flowed\nContent-Transfer-Encoding: 7bit\n\n" . $htmlContent; mail( $row["email"], "Update Your ArtsDB Listing", $body, $headers );
обновленный код, это приемлемо? Я смотрел на другой пост здесь для примера.
$body .= "\n--$boundary\nContent-Type: text/plain; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $textContent; // Add HTML body. $body .= "\n--$boundary\nContent-Type: text/html; charset=UTF-8; format=flowed\nContent-Transfer-Encoding: 8bit\n\n" . $htmlContent;
Вы используете Content-Type: text/plain; charset=UTF-8
Content-Type: text/plain; charset=UTF-8
чтобы сообщить почтовому читателю, что такая часть сообщения использует UTF-8, что хорошо, но … Что $textContent
переменная $textContent
? Это важный бит. Согласно Content-Transfer-Encoding: 7bit
, это 7-битная кодировка, поэтому она не может быть сырой UTF-8. Однако вы не используете обычные 7-битные кодировки, используемые для электронной почты. В противном случае будет (например) заголовок Content-Transfer-Encoding: quoted-printable
.
Подводя итог, вам необходимо:
Вы также можете отправить исходный UTF-8 как есть и установить Content-Transfer-Encoding: 8bit
но я бы не рекомендовал его. Вы рискуете нарушить стандарт SMTP, просто отправив очень длинные строки. Кроме того, вы не имеете представления о том, какие унаследованные программы будут проходить.
Электронная почта сложнее, чем кажется, поэтому рано или поздно вы в конечном итоге используете стороннюю библиотеку: PHP Mailer , Swift Mailer , PEAR Mail …
Content-Transfer-Encoding: 7 бит
Это не имеет никакого смысла – нет прямого сопоставления между 7-битными данными и представлением 8 + бит. Вам нужно изменить заголовки mime, чтобы указать, какую кодировку вы используете.
Для SMTP кодирование передачи должно быть 7-битной кодировкой ascii. Чтобы изменить ваши данные utf8, вам необходимо закодировать это – общие кодировки base64 и кавычки для печати (PHP обеспечивает кодирование и декодирование fns для обоих).
Почему бы просто не использовать хороший lib, например phpmailer или swiftmailer