Я пытаюсь отправить электронное письмо в кодировке utf-8
с помощью функции PHP mail(). И есть некоторые проблемы с этим. Такие, как:PHP mail utf-8 issues
- Если в тело электронной почты присутствует символы юникода, то я получаю письмо с заголовком «Content-Type: применение/октет-поток». В противном случае, если не было символов Юникода, у меня есть
Content-Type: text/plain; charset=us-ascii
. Такое поведение не зависит от посылки заголовкаContent-Type: text/plain; charset=UTF-8
- Если объект состоит из
utf-8
символов, которые закодированы в соответствии с RFC2047, то я получаю двойную кодированную тему, как этотSubject: =?us-ascii?Q?=3D=3FUTF-8=3FB=3Fw5HClsORwpfDkcKU=3F=3D?=
. Вместо того, чтобы ожидатьSubject: =?UTF-8?B?w5HClsORwpfDkcKU?=
Пример:
$subject = 'іїє';
$body = 'іїє';
$headers = "Content-Type: text/plain; charset=UTF-8\r\n"
. "MIME-Version: 1.0\r\n";
mail('[email protected]', mb_encode_mimeheader($subject, 'UTF-8', 'B'), $body, $headers);
здесь часть полученных заголовков:
Subject: =?us-ascii?Q?=3D=3FUTF-8=3FB=3Fw5HClsORwpfDkcKU=3F=3D?=
User-Agent: Heirloom mailx 12.5 6/20/10
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 8bit
С–С—С”
В МТА на сервере установлен постфикса. Как клиент, использующий gmail
Серьезно, вместо того чтобы пытаться обойти все ограничения встроенной функции 'mail()', вы должны использовать только подходящий класс почтовой программы, например [phpMailer] (https://github.com/PHPMailer/PHPMailer) или [Swiftmailer] (https://github.com/swiftmailer/swiftmailer). Вы сбережете себе массу хлопот и разочарований. – Simba
@Simba, спасибо за ваш совет! Но мне было интересно понять основную причину этой проблемы)) – registerers
Если кодировка является юникодом, а кодировка UTF8, вы указали оба? Вы пробовали кодировку, такую как ISO 8859-2? Вы можете заставить php mail() работать, но вы должны быть верны к письму. Ожидайте много тестовых передач. Пока вы не провалите неудачу, она потерпит неудачу. Я не думаю, что мне когда-либо приходилось работать так, как я хотел, менее чем в 100 попытках. Если вы упорствуете, то вы, вероятно, сделаете это. Ты можешь это сделать. – gladiola