Вам нужно использовать MIME. Добавьте заголовки почты:
MIME-Version: 1.0
Content-Type: text/plain;charset=utf-8
(Если вы уже используете MIME multipart/alternative
для помещения HTML и текста в одно и то же сообщение, вместо этого вы помещаете Content-Type: text/plain;charset=utf-8
в подзаголовки текстовой части.)
Предполагается, что кодировка, в которую вы будете отправлять свои «международные» символы, - UTF-8. Если вы планируете обслуживать несколько стран, UTF-8 является единственным разумным выбором кодировки для использования в вашем приложении, но если вы еще не задумывались об этом, ваш сайт может по умолчанию использовать западноевропейскую кодировку. Прежде чем беспокоиться о них по почте, убедитесь, что такие вещи, как китайские символы, корректно работают на вашем сайте и в базе данных.
Derail: есть места, где отправка почты в UTF-8 не самая эффективная вещь. Я не знаю о Китае, но в Японии все еще есть некоторые отсталые и нелепые почтовые системы (особенно веб-почта), которые не могут справиться с Юникодом и должны вместо этого иметь кодировку для конкретной локали, такую как Shift-JIS. Если вы концентрируетесь на этих рынках, вам часто приходится использовать iconv
для создания специально закодированных версий почты. Неприятно.
Теперь, поскольку многие почтовые серверы не могут справляться с не-ASCII-символами в теле письма, вам придется их кодировать. Вы можете выбрать для этого цитату для печати или base64; quoted-printable, как правило, меньше по размеру и более читабелен для контента, который также содержит символы ASCII:
Content-Type: text/plain;charset=utf-8
Content-Transfer-Encoding: quoted-printable
Hello! An a-acute is =C3=A1
Функция для кодирования в этом формате: quoted_printable_encode . Однако вам нужен достаточно современный PHP, чтобы получить эту функцию; если у вас его нет, вы можете вместо этого установить Content-Transfer-Encoding
на base64
и использовать base64_encode .
Наконец, если вы хотите включить в заголовки не-ASCII-символы (например, From
, To
или Subject
), существует совершенно другой синтаксис:
Subject: =?utf-8?b?QW4gYS1hY3V0ZSBpcyDDoQ==?=
Где этот QW...==
беспорядок в середине - это base64_encode
в «A-острый» в UTF-8.