читать почту из каталога maildir с правильной кодировкой и использовать в bash

Я пытаюсь реализовать какой-то отчет о спаме для своего почтового сервера. Письма сортируются по ситу и все находятся в одной папке под названием «Спам». Я перебираю папку с помощью bash. При этом я получаю необходимую информацию по почте:

cat $f | grep '^From' | head -n1 >> $TMPFILE
cat $f | grep '^Subject' | head -n1 >> $TMPFILE

но в некоторых письмах тема кодируется вот так

Тема: =?ISO-8859-1?Q?Тест:_Jaguar_XKR-S:_Unter_dem_Blech_lauert_d?=

Как я могу получить тему в правильной кодировке? Пробовал использовать почту, mailx, mutt... но никто не смог просто загрузить почту из файла.


person Max    schedule 20.08.2012    source источник
comment
К вашему сведению, конвейер не нужен: grep -m1 '^FROM' $f >> $TMPFILE   -  person chepner    schedule 20.08.2012
comment
Или даже sed -n '/^\([Ff]rom\|[Ss]ubject\):/p;/^$/q' "$f" >$TMPFILE; но если вы все равно переходите на Perl, это спорно.   -  person tripleee    schedule 21.08.2012
comment
@chepner хороший способ, лучше использовать меньше труб, верно?   -  person Max    schedule 21.08.2012
comment
@tripleee я боюсь этого регулярного выражения, но спасибо за него. может быть, я смогу использовать его позже :)   -  person Max    schedule 21.08.2012


Ответы (1)


Кодировка в строке темы выглядит как слова MIME. Одним из возможных способов декодирования данных является написание Perl-скрипта, использующего MIME::Words. Вы можете сделать сценарий perl сценарием оболочки и вызвать его из своего сценария bash.

convert_subject.sh:

 #!/bin/sh
 /usr/bin/perl -pe 'use MIME::Words(decode_mimewords); $_=decode_mimewords($_);'

Пример использования скрипта:

$ echo "=?ISO-8859-1?Q?Test:_Jaguar_XKR-S:_Unter_dem_Blech_lauert_d?=" | sh convert_subject.sh

Что выводит:

Test: Jaguar XKR-S: Unter dem Blech lauert d
person j.w.r    schedule 20.08.2012
comment
работает красиво! одна маленькая вещь, немецкие умляуты конвертируются неправильно. Любые идеи? :) Тема: Nur fÃŒr kurze Zeit: 15 евро Gutschein fÃŒr - person Max; 20.08.2012
comment
работает нормально, сбой умлаутов вызван моим форматированием почты как html, а не ошибкой вашего маленького скрипта. СПАСИБО - person Max; 20.08.2012
comment
На самом деле похоже, что у вас есть UTF-8, но вы просматриваете его в терминале ISO-8859-1 (или другом устаревшем 8-битном западном, может быть кодовая страница Windows 1251 или т. Д.). - person tripleee; 21.08.2012
comment
я добавил "Content-Type: text/html; charset='utf-8'" в почтовый скрипт, теперь большинство умлаутов в порядке. просто некоторые кое-где стоят теперь вопросительный знак в квадратике. какие-либо предложения? мой код: ( echo "Subject: Spam" echo "MIME-Version: 1.0" echo "Content-Type: text/html; charset='utf-8'" echo "Content-Disposition: inline" echo "<html><body><pre>" cat $TMPFILE echo "</pre></body></html>" ) | sendmail $i - person Max; 21.08.2012
comment
я понял, что строки, начинающиеся с =?utf-8?Q?, работают, строки с =?iso-8859-1?Q? получаются? вместо умлаутов. - person Max; 21.08.2012
comment
работает: =?utf-8?Q?Top-_Reiseschn=C3=A4ppchen_+_Urlaubsgeld?=. не работает: =?iso-8859-1?Q?K=F6rperliche_N=E4he?=. выполняется через bash (echo ?... | sh convert...) - person Max; 21.08.2012