LINUX.ORG.RU
решено ФорумAdmin

изменить кодировку тела письма в mail


1

1

Снова всем привет. Для отправки сообщений на почту использую команду mail типа так:

echo «Текст письма»

read TELO

mail -s «test» user@domain.com <<EOM

$TELO

EOM

письмо уходит в кодировке utf-8 и в клиентах типа аутлука крякозябры может кто знает как кодировку тела письма поменять?

можно конечно сделать костыль типа записать значение TELO в файл потом поменять его кодировку, потом содержимое файла пересылать в теле письма но хочется красиво парой параметров все запилить.

вот так работает через костыль

echo «Текст письма»

read TELO

echo $TELO >> /root/telo

iconv -f utf8 -t KOI8-R /root/telo -o /root/telo.koi8r

mail -s «test» user@domain.com < /root/telo.koi8r

#удаляем временные файлы чтоб не мешался

rm /root/telo

rm /root/telo.koi8r

fordiego
() автор топика
Ответ на: комментарий от AITap

данный кусок используется в скрипте фаервола. когда мои коллеги меняют настройки фаервола они должны написать почему его изменили, тоесть идет использования комманды read затем этот тект передается на почту и все как бы вкурсе что в конторе происходит )))

че то вот такая конструкция iconv -t koi8-r | mail -s «test» user@domain.com не работает

fordiego
() автор топика

Чтобы клиент правильно показывал кодировку, если не умеет нормально определять, нужно её указать. Самые простое, указать в хедере (в твоём случае utf8) и эта кодировка будет применяться для всего сообщения и хедеров, если не указано иное:
Content-Type: text/plain; charset=UTF-8
и по желанию для совсем древних клиентов
Content-Transfer-Encoding: 8bit

echo «Тело: кириллица» |mail -a «Content-Type: text/plain; charset=UTF-8» -s «Заголовок: кириллица» user@mail

bass ★★★★★
()
Ответ на: комментарий от Komintern

после того как прописал

mail -a «Content-Type: text/plain; charset=UTF-8» -s «TEMA PISMA Кирилица» user@domain.com < /root/telo

пишет usage: mail [-iInv] [-d BaseDirectory] [-s Subject] [-c addresses] [-b addresses] [addresses]

видимо консольный mail так не умеет

fordiego
() автор топика
Ответ на: комментарий от fordiego

а пайп это типа echo «превед как дила» | grep дила тоесть когда вторая команда продолжает работать с теме данными что выдала первая.....

fordiego
() автор топика
Ответ на: комментарий от fordiego

read читает строку с stdin и записывает в переменную. iconv без указания имени файла тоже читает stdin (и пишет на stdout). mail тоже читает stdin, иначе бы Вы не смогли воспользоваться конструкцией «<<EOM».
Зачем мучаться с временными файлами и переменными?
Изучите также http://tldp.org/LDP/abs/html/

не работает

http://segfault.kiev.ua/smart-questions-ru.html

AITap ★★★★★
()
Ответ на: комментарий от fordiego

вот таким способом получилось существенно сократить размер скрипта и сделать его намного красивей и приятней

read TELO

echo $TELO | iconv -t KOI8-R | mail -s «TEMA PISMA Кирилица» user@domain.com

тело письма приходит кириллицей а вот тема нет (((

fordiego
() автор топика
Ответ на: комментарий от fordiego

данный кусок используется в скрипте фаервола. когда мои коллеги меняют настройки фаервола они должны написать почему его изменили, тоесть идет использования комманды read затем этот тект передается на почту и все как бы вкурсе что в конторе происходит )))

а не лучше использовать DVCS в таком случае?

xpahos ★★★★★
()
Ответ на: комментарий от fordiego

Команда mail понимает -a с 2008года официально, о чём написано в мане. у тебя там busybox или какая-то некрофилия?

bass ★★★★★
()
Ответ на: комментарий от xpahos

DVCS незнаю как настраивать да и не думаю что для такой мелкой задачи надо поднимать такую систему

fordiego
() автор топика
Ответ на: комментарий от bass

даж не могу посматреть какой он версии ))) видно древний буду гуглить как обовить

fordiego
() автор топика
Ответ на: комментарий от bass

yum provides *bin/mail

mailx-8.1.1-44.2.2.x86_64 : Программа /bin/mail для отправки простых почтовых сообщений.

Repo : installed

Matched from:

Filename : /bin/mail

fordiego
() автор топика

ИМХО, дело не в кодировке, а в том что ты её не указываешь да ещё и шлёшь голый 8-битный текст, что вообще говоря некорректно.

Кодируй в base64 или quoted printable. Я бы сделал на perl, но наверняка есть готовые утилиты

router ★★★★★
()
Ответ на: комментарий от fordiego

Если не использовать кодирование, то письмо формируется достаточно просто. Поэтому, ИМХО, раз уж всё одно есть скрипт, формировать в нём письмо полностью, со всеми заголовками, включая Subject и Content-Type: text/plain; charset=UTF-8. Это не так сложно, зато такое письмо можно скормить команде sendmail напрямую, не заморачиваясь на mail.

Просто, допустим, в CentOS 6 используется Heirloom mailx (previously known as nail), у которого опция -a аттачит файл, а не дополнительный заголовок.

mky ★★★★★
()
Ответ на: комментарий от fordiego

read TELO

echo $TELO | iconv -t KOI8-R | mail -s «TEMA PISMA Кирилица» user@domain.com

тело письма приходит кириллицей а вот тема нет (((

subj=`echo TEMA PISMA Кириллица | iconv -t KOI8-R`; echo $TELO | iconv -t KOI8-R | mail -s «$subj» user@domain.com

spunky ★★
()
Ответ на: комментарий от fordiego

Вообще всем спасибо! Очень помогли.

Мораль темы такова что утилита mail в centos 5.8 не умеет указывать свойства заголовков письма (Content-Type)

Выход либо использовать команды кодировки iconv либо использовать другую утилиту например nail

fordiego
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.