uscr 30.08.2011 17:45
Есть проблема! — [РЕШЕНО] Проблема с кодировкой в рассылке.
Здравствйте. Рассылаю уведомления о коммитах в гит-репозиторий с сервера под centOS. Рассылаю с помощью скрипта SendEmail через сервера гугла.Проблема в том, что коммиты приходят кракозябрами. Тема письма отображается нормально, а весь русский текст превращается в кракозябры.
РЕШЕНИЕ:
SendEmail имеет опцию -o message-charset=CHARSET, в которой указывается кодировка сообщения.-o message-charset=UTF-8, в моём случае, решает проблему.
Пример:
делаю так -
1 |
/usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu [email protected] -xp pass -u "Мы все умрём" -m "Проверочка"
|
На почту приходит вот что: "Проверочка" Причём декодер лебедева считает, что это cp1251. При этом такая конструкция:
1 |
/usr/local/bin/sendEmail -f [email protected] -t [email protected] -s smtp.gmail.com:587 -xu [email protected] -xp pass -u "Мы все умрём" -m `echo "Проверочка"|iconv -f utf-8 -t cp1251`
|
не помогает, приходят другие кракозябры - "Ïðîâåðî÷êà".
Локаль сервера, разумеется "человеческая" - en_US.UTF-8
О чём думать? Кого ругать?
Колхозный - прогнать сообщение через iconv и преобразовать его в KOI-8.
Это слишком колхозно :)
Правильный - обернуть текст в MIME. Поищите в интернете "MIME почтовое сообщение". Как бонус Вы можете посылать сообщения HTML-е и т.о. сделать их симпатичнее.
Круто! Нужно будет наладить отправку уведомлений на корпоративном бланке и выбить премию под это дело :)
Если ты используешь этот sendEmail http://caspian.dotconf.net/menu/Software/SendEmail
То там есть параметр -o message-charset=CHARSET укажи в нем UTF-8 или если не помогает то можно в письмо просто добавить header через -o message-header=HEADER
А передать нужно вот такой header:
Content-Type: text/plain; charset=utf-8
И тогда можешь убрать iconv из своей конструкции))
Но как сказали выше MIME более правильное решение
То там есть параметр -o message-charset=CHARSET укажи в нем UTF-8 или если не помогает то можно в письмо просто добавить header через -o message-header=HEADER
А передать нужно вот такой header:
Content-Type: text/plain; charset=utf-8
И тогда можешь убрать iconv из своей конструкции))
Но как сказали выше MIME более правильное решение
Да. Именно этот сендемаил.
-o message-charset=CHARSET - помогло, спасибо.
-o message-charset=CHARSET - помогло, спасибо.
Нужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документациюНужно читать документацию
Судя по периодическим буквам "Ð" это UTF8 (что логично). По стандарту обычный текст в письме должен содержать только латинские буквы, правда почтовые программы часто показывают не латин символы как KOI-8r. Для другого надо использовать MIME заголовки и MIME контейнеры. Соответственно есть два способа: