2015-09-10 5 views
0

Я пытаюсь отправить электронное письмо в кодировке utf-8 с помощью функции PHP mail(). И есть некоторые проблемы с этим. Такие, как:PHP mail utf-8 issues

  1. Если в тело электронной почты присутствует символы юникода, то я получаю письмо с заголовком «Content-Type: применение/октет-поток». В противном случае, если не было символов Юникода, у меня есть Content-Type: text/plain; charset=us-ascii. Такое поведение не зависит от посылки заголовка Content-Type: text/plain; charset=UTF-8
  2. Если объект состоит из 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

+0

Серьезно, вместо того чтобы пытаться обойти все ограничения встроенной функции 'mail()', вы должны использовать только подходящий класс почтовой программы, например [phpMailer] (https://github.com/PHPMailer/PHPMailer) или [Swiftmailer] (https://github.com/swiftmailer/swiftmailer). Вы сбережете себе массу хлопот и разочарований. – Simba

+0

@Simba, спасибо за ваш совет! Но мне было интересно понять основную причину этой проблемы)) – registerers

+0

Если кодировка является юникодом, а кодировка UTF8, вы указали оба? Вы пробовали кодировку, такую ​​как ISO 8859-2? Вы можете заставить php mail() работать, но вы должны быть верны к письму. Ожидайте много тестовых передач. Пока вы не провалите неудачу, она потерпит неудачу. Я не думаю, что мне когда-либо приходилось работать так, как я хотел, менее чем в 100 попытках. Если вы упорствуете, то вы, вероятно, сделаете это. Ты можешь это сделать. – gladiola

ответ

0

Email - это очень архаичная, устаревшая и сложная технология. Это особенно верно при кодировании символов. Я бы предложил использовать библиотеку, такую ​​как PHPMailer. Если вы настаиваете на том, чтобы делать это с нуля, истинный ответ выходит за рамки вашего вопроса. Браузеры, клиенты и многое другое усложняют эту проблему. Я не могу сказать вам причину вашей проблемы, но решение - PHPMailer.

 Смежные вопросы

  • Нет связанных вопросов^_^