iconv / mail

На самом деле это единственный раздел про unix на этом форуме

Модераторы: /dev/random, Модераторы разделов

Аватара пользователя
lgar
Сообщения: 118
ОС: Ubuntu

iconv / mail

Сообщение lgar »

Отправляю письма из командной строки с помощью утилиты mail, при этом одни почтовые программы автоматом распознают правильную кодировку, другие нет. Утилита iconv позволяет устанавливать нужную кодировку, но проблема в том, что я не знаю кодировку (или они разные), которую вписывают в -f, то есть начальную кодировку. Можно ли перекодировать весь текст в UTF-8, например, при этом не указав начальную кодировку?
Спасибо сказали:
Kopilov
Сообщения: 954
ОС: [K]Ubuntu, Debian

Re: iconv / mail

Сообщение Kopilov »

Можно, с помощью enconv
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5405
ОС: Gentoo

Re: iconv / mail

Сообщение /dev/random »

Две утилиты в одном и том же пакете:

enca - автоопределение кодировки, дальше перекодируйте чем хотите.

enconv - автоопределение кодировки и автоматическое перекодирование. Осторожно: если указать файл как параметр командной строки, то он будет перекодирован на месте и, если кодировка определилась неправильно, может превратиться в нечто ещё более неудобоваримое. Так что лучше передавайте данные через пайп.
Спасибо сказали:
Аватара пользователя
t.t
Бывший модератор
Сообщения: 7390
Статус: думающий о вечном
ОС: Debian, LMDE

Re: iconv / mail

Сообщение t.t »

Когда-то у econv-а была ещё одна проблема: некоторые комбинации символов кириллицы "бились" при перекодировании между юникодом и восьмибитными кодировками. Есть ли она сейчас, не знаю. Но полезности enca это в любом случае не отменяет.
¡иɯʎdʞ ин ʞɐʞ 'ɐнɔɐdʞǝdu qнεиж
Спасибо сказали:
Аватара пользователя
sash-kan
Администратор
Сообщения: 13939
Статус: oel ngati kameie
ОС: GNU

Re: iconv / mail

Сообщение sash-kan »

lgar
если ваш /usr/bin/mail понимает опцию "-a" (добавить строку в заголовок), как умеет bsd-mailx, то можете воспользоваться таким скриптом:

Код: Выделить всё

#!/bin/bash

usage() {
  echo $1 >&2
  exit 1
}

m=/usr/bin/mail
e=/usr/bin/enca

[ -x ${m} ] || usage "${m} not found"
[ -x ${e} ] || usage "${e} not found"

f=$(tempfile)

cat - >${f}

cat ${f} | ${m} -a "MIME-Version: 1.0" -a \
"Content-Type: text/plain; charset=$(enca -L ru -m ${f})" -a \
"Content-Disposition: inline" -a \
"Content-Transfer-Encoding: 8bit" -a \
"User-Agent: ${m}" $@

rm ${f}

использовать можно как и /usr/bin/mail:
$ echo тест | iconv -t cp1251 | ./this-script -s "сабжект письма" re@ciev.er
современными mua полученное письмо должно нормально отображаться·
Писать безграмотно - значит посягать на время людей, к которым мы адресуемся, а потому совершенно недопустимо в правильно организованном обществе. © Щерба Л. В., 1957
при сбоях форума см.блог
Спасибо сказали: