отправка почты в UTF-8

Интересно, может ли кто-нибудь помочь.

Я унаследовал скрипт, который отправляет некоторый контент на трех языках (все на одном и том же содержимом – повторяется), однако, когда они получены, символы содержимого не работают, поскольку я предполагаю, что это проблема 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 .

Подводя итог, вам необходимо:

  1. Введите исходную строку, содержащую действительный UTF-8.
  2. Выберите кодировку для передачи, например quoted_printable_encode () .
  3. Добавьте заголовок, чтобы указать, какую кодировку передачи вы выбрали.

Вы также можете отправить исходный 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