Как извлечь и отсортировать прикрепленные изображения из электронных писем?

1116
Markus

Вот о чем я думал:

Я хочу создать Raspberry Pi Picture-frame (DPF) для моей бабушки, но с базовой поддержкой электронной почты. Письма могут быть отправлены шестью членами семьи и будут получать ежедневно fetchmail / procmail. Это уже работает!

В /home/pi/Mail/I теперь есть три файла ( по одному для каждого сообщения электронной почты, включая вложения):

  • msg.nTIB
  • msg.pTIB
  • msg.oTIB

Теперь я хочу извлечь SENDER, SUBJECT (, TEXT) и ATTACHMENT из каждого файла, чтобы переименовать файл вложения и добавить текст с помощью imagemagick (еще не включен).

for file in msg.*; do export SENDER=`tee $file | formail -zxFrom: -zxReply-To:|cut -fs- -d'<'|cut -f1 -d'>'` SUBJECT = `/bin/cat $file | formail -zxSubject:`  if grep -qxis $SENDER /home/pi/Mail/.markus; then SENDER2=Markus fi if grep -qxis $SENDER /home/pi/Mail/.someone; then SENDER2=Someone fi  /bin/mkdir -p /home/pi/Mail/$SENDER2 >/dev/null  munpack -C /home/pi/Mail/$SENDER2 $file /bin/cat $file /bin/rm $file done 

Часть grepи munpackотлично работает, но извлечение SENDER и SUBJECT не работает, когда я запускаю sh-файл. Похоже, что он замерз. Я могу только отменить это с ctrl- c!

Я не знаю, почему, когда я включаю строки 2 и 3 в мой, .procmailrcэто работает без проблем.

Я имею в виду, что это какая-то базовая задача, а не волшебство, но я не смог найти ничего полезного с Google :/

Любая помощь приветствуется! Может быть, у вас есть другое решение. Я совершенно не эксперт в Linux, так что, может быть, немного проще:)

1

1 ответ на вопрос

1
tripleee

Как catи teeявляются бесполезными ; teeвдвойне, и причина (то, что вы воспринимаете как) замерзание сценария. Требуется аргумент имени файла, в который файл должен копировать свои входные данные, и поток текста или данных на стандартный ввод, который, конечно, он не получает, поэтому он находится там.

Кроме того, вы обычно должны указывать свои переменные .

SENDERЭкстракции рода проблематичным. Вы действительно хотите, чтобы переменная содержала две строки? Обычно вы можете просто сделать formail -rtzxTo: <"$file"и получить вменяемый результат. ( -tОпция имеет некоторую неясную семантику, но для такого рода целей она, вероятно, делает правильные вещи.) Это также избавляет от надоедливых cuts, чтобы получить только конечный адрес электронной почты (потому что formailв режиме генерации ответа это уже делает для вас).

Наконец, shсинтаксис не допускает пробелов вокруг знака равенства в присваиваниях.

for file in msg.*; do SENDER=$(formail -zxFrom: -zxReply-To: <"$file" | cut -fs- -d'<'|cut -f1 -d'>') SUBJECT=$(formail -zxSubject: <"$file")  if grep -qxis "$SENDER" /home/pi/Mail/.markus; then SENDER2=Markus elif grep -qxis "$SENDER" /home/pi/Mail/.someone; then SENDER2=Someone fi  mkdir -p /home/pi/Mail/"$SENDER2" munpack -C /home/pi/Mail/"$SENDER2" "$file" cat "$file" rm "$file" done 

Я также удалил полные пути из имен команд (вы должны просто убедиться, что вы PATHв порядке) и переключился с `obsolescent`синтаксиса замены процесса на $(modern). mkdir -pработает тихо, поэтому я удалил перенаправление вывода с этого.

Комплекс grepможет быть заменен простым отображением, примерно так:

SENDER2=$(awk -v who="$SENDER" ' $1 == who { print $2; x=1 } END { exit 1-x }' <<'________HERE' msmith@dmel.example.com Markus someone@there.example.net Someone ________HERE 

Это делает предположения о том, что у вас есть в файлах, которые вы в настоящее время извлекаете, но вы должны понять. Это все еще не решает, как установить, SENDER2если у вас нет отправителя в файле; но, возможно, сценарий должен просто полностью отклонить эти файлы по соображениям безопасности?

Прошу прощения за мой поздний ответ, вышеописанный скрипт работал очень хорошо! Однако приведенный ниже скрипт, который является очень хорошим решением, не работает должным образом, я думаю, что чего-то не хватает, но я не смог это исправить. И да, если Отправитель неизвестен, электронная почта должна быть отклонена. Я не хочу, чтобы моя бабушка получала спам или d *** фото;) Markus 9 лет назад 0
Извините за проблемы со вторым скриптом. Но без дополнительной диагностики я мало что могу сделать. Возможно, вам следует опубликовать новый вопрос с некоторыми диагностическими данными и т.д. Вероятно, хорошая идея, чтобы включить ссылку на этот вопрос. tripleee 9 лет назад 0

Похожие вопросы