5 февраля 2013 г.

Кодировка сообщений при отправке через cron

Блог переехал на https://shapkin.me


Столкнулся с проблемой, при которой cron наследует неправильные системные переменные, в следствие чего, почтовая программа наследует также неверные переменные и может побиться кириллическая и прочая специфичная кодировка.

Вот что было в заголовках кривых сообщений:
Subject: ?????????????????????? ?? ?????????????????? ???? ???????
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: application/octet-stream
Content-Transfer-Encoding: 8bit
А вот как должно быть:
Subject: =?utf-8?B?0KPQstC10LTQvtC80LvQtdC90LjQtSDQviDQv9GA0L7QsQ==?=
 =?utf-8?B?0LvQtdC80LDRhSDQvdCwINGB0LXRgNCy0LXRgNC1IGlmc2F3LmNvbQ==?=
User-Agent: Heirloom mailx 12.4 7/29/08
MIME-Version: 1.0
Content-Type: text/plain; charset=utf-8
Content-Transfer-Encoding: 8bit

Решение нашлось такое:
Необходимо установить правильные переменные окружения для cron (LANG, LANGUAGE, LC_CTYPE), при отправке сообщений почтовыми утилитами, Content-Type по умолчанию устанавливается в text/plain, а charset в унаследованные по умолчанию переменные окружения LC_*, LANG.
Итак, узнаем системную кодировку:
# echo $LANG
en_US.UTF-8
Теперь нам надо прописать ее в конфиг локального cron'а(можно и в глобальный /etc/crontab):
LANG=en_US.UTF-8
LANGUAGE=en
LC_CTYPE=en_US.UTF-8
Осталось перезапустить cron и радоваться киррилице в почтовике.

Комментариев нет:

Отправить комментарий