Назад | Перейти на главную страницу

Преобразование необработанного сообщения электронной почты в обычный текст в Linux

Я нахожусь в папке cur в магазине maildir. Я хочу передать сообщение ... передать его команде ... и выплюнуть тело сообщения. Просто.

Пример: если это mime-сообщение ... и есть версия с открытым текстом ... покажите мне открытый текст ... Если это HTML-сообщение без открытого текста ... тогда визуализируйте HTML и дайте мне некоторую подобие текста сообщения ... Если это просто изображение ... ничего не отображать .. или может быть заполнитель [изображение] ..

Зачем мне это нужно? Я пытаюсь обучить spamassassin ... и я хочу выплюнуть ключевые заголовки и выдержку из тела письма, чтобы я мог быстро просмотреть все сообщения и решить, какие из них являются законными, какие ветчинными, а какие спамовыми .. . Я уже извлекаю список сообщений из maildir, которые соответствуют заданному баллу X-Spam ... и показываю нужные заголовки ... Мне просто нужно добавить тело сообщения ... но возникла проблема

Некоторые другие вопросы здесь предполагают использование mutt. Я установил это и посмотрел на него - но из того, что я мог видеть - мне пришлось бы указать его на конкретный maildir ... что усложнит процесс ... в идеале я бы хотел что-то, что просто "интерпретирует" электронное письмо сообщение из файла и отображает его

Ваша помощь очень ценится. Спасибо

Мне удалось придумать следующий сценарий ... но его все еще не хватает. Все еще дорабатывала, когда я заметил, что Эндрю предложил munpack из mpack пакет

Я нашел инструмент reformime для извлечения простой / текстовой части сообщения mime. Я использовал GNU recode тоже, но обнаружил, что это удаляет материал, который не цитируется для печати (QP). поэтому я решил использовать sed, вероятно, довольно неэффективно, чтобы удалить код QP .. и заменить общие символы, которые были экранированы QP.

Вот сценарий, который я придумал ... Теперь я могу зайти в папку maildir - запустить сценарий ... и получить сводку сообщений. Предоставление аргумента будет соответствовать определенным оценкам с использованием регулярного выражения.

#!/bin/bash

DEFSC="3[0-9]"
SPAMSCORE=${1-$DEFSC}

echo "Scanning for messages with a Spam Score filter of ${SPAMSCORE}"

# Get a list of messages with desired spam score
grep "^X-Spam-Score: ${SPAMSCORE}\$" * | sed 's/:X-Spam-Score: [0-9-]*//g' > ~/tmpspam

while read MSG; do
    # Extract Message ID for easy reading
    MSGID=$(echo "${MSG}" | grep -oe '^[0-9]*')
    echo "================= ${MSGID} ================="
    # Find the headers that we are looking for
    grep -e "^X-Spam-Status" -e "^Subject:" -e "^From:" ${MSG} | sed -r 's/=\?[^?]*\?[^?]*\?([^?]*)\?=/\1/g;s/=20/ /g;s/=2C/,/g;s/=3A/:/g'
    # Use reformime to find which mime section is text/plain
    MIMESEC=$(cat ${MSG} | ~/reformime -i | grep -B 1 '^content-type: text/plain' | head -n 1 | grep -oe "[0-9\.]*$")
    # Display that Mime Section
    echo '- - - - - - - - - - - - - - - - - - - - - - '
    cat ${MSG} | ~/reformime -e -s ${MIMESEC} | awk '/./{a=a+1;if(a<=10){print $0;}}' | sed -r 's/https?:\/\/[A-Za-z0-9.?%+_@&;=\/-]*/<<url>>/g'
    echo '============================================'
done < ~/tmpspam

# Delete Temp File
rm -f ~/tmpspam

Например:

skim_msgs.sh '4[0-9]'

ВЫВОД: (находит одно сообщение)

Scanning for messages with a Spam Score filter of 4[0-9]
================= 1518851309 ================= 
From: John Doe <jdoe@gmail.com> 
Subject: Watch "If Cops Talked Like Pilots" on YouTube 
X-Spam-Status: No, score=4.1
- - - - - - - - - - - - - - - - - - - - - - 
<<url>>
============================================