Помилка: 550 Subject contains invalid characters

  у розділі Технічні теми 

Помилка 550

Жив-був собі один PHP-скриптик для відправлення електронних листів, що використовує PHP-функцію mail. І в один прекрасний день листи приходити перестали. Виявилося що листи повертаються відправнику з помилкою 550 Subject contains invalid characters (тема містить заборонені символи).

Справа в тому що стандарти вимагають щоб усі заголовки листа були у кодуванні ASCII. І будь-які інші символи, в тому числі кирилиця, якої немає в ASCII, вважаються помилковими. І раптово деякі поштові сервери стали "правильними" і перестали приймати пошту.

На щастя, існує документ RFC 1342 який регламентує використання не-ASCII у заголовках листів. Для цього потрібно вказувати заголовок у вигляді:

=?charset?encoding?TEXT?=

Наприклад:

=?utf-8?B?Привіт?=

encoding може бути B або Q, формат "base-64" і "quoted-printable" відповідно (теж описано в RFC 1342).

Таким чином, щоб листи успішно доставлялися, потрібно правильно оформляти заголовки, наприклад:

$to = 'example@example.com';
$from = "sender@example.com"

$subject = '=?utf-8?B?'.base64_encode('Тема з не-ASCII символами ó¿¡á').'?=';
$sender_name   = '=?utf-8?B?'.base64_encode('Назва відправника з не-ASCII символами ó¿¡á').'?=';

$message = 'Текст повідомлення';
$headers = 'From: ' . $sender_name . ' <' . $from . '>\r\n';

$headers = 'Content-Type: text/plain; charset=utf-8'.'\r\n';
mail($to, $subject, $message, $headers);

Коментарі