Задача: почтовая рассылка. Юникод, html+text, PHP. Используется давно проверенный PEAR Mail. Всё прекрасно работает не один год. И вдруг, начинаются жалобы подписчиков с mail.ru на тему «проблемы с кодировкой».
Начинаю разбираться. Действительно, проблемы. После долгой серии экспериментов выясняется, что Mail.ru перестал корректно отрабатывать Content-Type boundary, разделитель блоков в Mime-письме. После ещё серии экспериментов становится ясно, что стандартная форма с многострочным заголовком вида:
Content-Type: multipart/alternative;
boundary="=_a31d5f9813b277cf61cb88c8fd2adf70"
Content-Type: multipart/alternative;
boundary="=_a31d5f9813b277cf61cb88c8fd2adf70"
Ну, как это дело обойти я не придумал, так что для Mail.Ru просто запретил html, оставив отсылку одного текста, письмо уже не Mime, показывается как надо.
Прошло неделя или две. Вчера делал небольшую внутреннюю рассылку и... опаньки! на @gmail.com вижу мусор с заголовками. С кодировкой всё ок, но мусор... Сперва ассоциация не возникла. Но начал копать глубже — блин, те же симптомы. Только режется теперь многострочник не в content-type, а в subject:
Subject: =?utf-8?B?W9Cc0JDQotCkXSDQldC20LXQtNC90LXQstC90YvQuSDQvtGC0Yc=?=
=?utf-8?B?0ZHRgiDQt9CwIDI2INCw0L/RgNC10LvRjyAyMDEyINCz0L7QtNCw?=
Subject: =?utf-8?B?W9Cc0JDQotCkXSDQldC20LXQtNC90LXQstC90YvQuSDQvtGC0Yc=?=
=?utf-8?B?0ZHRgiDQt9CwIDI2INCw0L/RgNC10LvRjyAyMDEyINCz0L7QtNCw?=
Чего только не предпринимал... Пока не понял, что если отправить Subject одной строкой, то всё равно порежется на Content-Type, как и ранее на Mail.Ru.
Теперь — барабанная дробь. Ну, то что на локалхосте почта принимается нормально или на @yandex.ru всё пучком — это не интересно. Вот только на GMail.com у меня хостится ещё свой домен. Так вот, например, на balancer@мой-домен-на-gmail.ru приходит мусор. Но один раз сегодня(!) в серии экспериментов письмо прошло в нормальном виде. А на subscribes@мой-домен-на-gmail.ru почта приходит по-прежнему, как и раньше, замечательно.
Такое впечатление, что на Mail.Ru, а теперь и на Gmail (но поэтапно и не на всех серверах) обновляют какой-то софт, который так вот режет по какому-то критерию многострочные заголовки.
Я, прямо, в растерянности.
Никто не сталкивался?
Вот типичный пример «проблемного» полного заголовка:
Return-Path: <balancer@www.aviaport.ru>
X-Original-To: balancer@www.airbase.ru
Delivered-To: balancer@www.airbase.ru
Received: from www.aviaport.ru (unknown [89.108.119.77])
by www.airbase.ru (Postfix) with ESMTP id E9A9AACEED
for <balancer@www.airbase.ru>; Fri, 27 Apr 2012 08:10:59 +0400 (MSK)
Received: by www.aviaport.ru (Postfix, from userid 1000)
id E10DEC06; Fri, 27 Apr 2012 08:10:59 +0400 (MSK)
To: balancer@www.airbase.ru
Subject: =?utf-8?B?W9Cc0JDQotCkXSDQldC20LXQtNC90LXQstC90YvQuSDQvtGC0Yc=?=
=?utf-8?B?0ZHRgiDQt9CwIDI2INCw0L/RgNC10LvRjyAyMDEyINCz0L7QtNCw?=
X-PHP-Originating-Script: 1000:mail.php
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="=_3ed319f250e0ab88e7dcb38313768187"
From: =?utf-8?B?QXZpYVBvcnQuUnU=?= <list@aviaport.ru>
Message-Id: <20120427041059.E10DEC06@www.aviaport.ru>
Date: Fri, 27 Apr 2012 08:10:59 +0400 (MSK)
--=_3ed319f250e0ab88e7dcb38313768187
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=utf-8
[МАТФ] Ежедневный отчёт за 26 апреля 2012 года
====================================================
Персоны
------------------------------------------------------------
- Добавлено за сутки: 53
- Обновлено за сутки: 2
...
Вариаций много пробовал, но всё без толку...
Вот пример «убитого» заголовка на gmail:
Delivered-To: balancer@balancer.ru
Received: by 10.229.45.212 with SMTP id g20csp17644qcf;
Thu, 26 Apr 2012 20:39:53 -0700 (PDT)
Received: by 10.112.49.131 with SMTP id u3mr5031337lbn.14.1335497993524;
Thu, 26 Apr 2012 20:39:53 -0700 (PDT)
Return-Path: <balancer@www.aviaport.ru>
Received: from www.aviaport.ru ([89.108.119.77])
by mx.google.com with ESMTP id r7si1541855lbk.31.2012.04.26.20.39.52;
Thu, 26 Apr 2012 20:39:53 -0700 (PDT)
Received-SPF: neutral (google.com: 89.108.119.77 is neither permitted nor denied by best guess record for domain of balancer@www.aviaport.ru) client-ip=89.108.119.77;
Authentication-Results: mx.google.com; spf=neutral (google.com: 89.108.119.77 is neither permitted nor denied by best guess record for domain of balancer@www.aviaport.ru) smtp.mail=balancer@www.aviaport.ru
Date: Thu, 26 Apr 2012 20:39:53 -0700 (PDT)
Message-Id: <4f9a1509.c727700a.0ddf.ffffc025SMTPIN_ADDED@mx.google.com>
Received: by www.aviaport.ru (Postfix, from userid 1000)
id B35DEB9B; Fri, 27 Apr 2012 07:39:52 +0400 (MSK)
To: balancer@balancer.ru
Subject: =?utf-8?B?W9Cc0JDQotCkXSDQldC20LXQtNC90LXQstC90YvQuSDQvtGC0Yc=?=
=?utf-8?B?0ZHRgiDQt9CwIDI2INCw0L/RgNC10LvRjyAyMDEyINCz0L7QtNCw?=
X-PHP-Originating-Script: 1000:mail.php
MIME-Version: 1.0
Content-Type: multipart/alternative;
boundary="=_44ee5bffb4ef21f7478791b24d9331a4"
From: =?utf-8?B?QXZpYVBvcnQuUnU=?= <list@aviaport.ru>
Message-Id: <20120427033952.B35DEB9B@www.aviaport.ru>
Date: Fri, 27 Apr 2012 07:39:52 +0400 (MSK)
--=_44ee5bffb4ef21f7478791b24d9331a4
Content-Transfer-Encoding: 8bit
Content-Type: text/plain; charset=utf-8
....