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

Сценарии или инструменты для анализа сообщения электронной почты для удаления вложения с определенным именем

Я настроил интеграцию электронной почты Redmine, и, хотя это круто, главное раздражение заключается в том, что у людей есть подписи с логотипом компании, который затем размещается в каждом тикете, который они обновляют по электронной почте. Я знаю, что это не идеальное решение, но я хотел бы передать по конвейеру скрипту, который удаляет вложения с именем «image001.png» из сообщения, чтобы я мог затем передать его обработчику. Существуют ли инструменты, которые помогут в этом, или мне нужно начинать с нуля?

Перед: alias > mailhandler.rb

После: alias > parser.script > mailhandler.rb

Вы можете использовать MIMEDefang milter как дополнение к postfix (или sendmail).

http://www.roaringpenguin.com/products/mimedefang

MIMEDefang может проверять и изменять сообщения электронной почты, когда они проходят через ваш почтовый ретранслятор. MIMEDefang написан на Perl, а его действия по фильтрам выражены на Perl, поэтому он очень гибкий. Вот некоторые вещи, которые вы можете легко сделать с помощью MIMEDefang:
* Удалять или изменять вложения в зависимости от имени файла, содержимого, результатов сканирования на вирусы, размера вложения и т. Д.
* Замените большие вложения ссылками на централизованно хранимую копию, чтобы облегчить нагрузку на пользователей POP3 с медленными модемными ссылками.
[...]

http://www.mimedefang.org/

MIMEDefang - бесплатное программное обеспечение: оно выпущено на условиях Стандартной общественной лицензии GNU. Он работает под Linux, FreeBSD, Solaris и большинством других UNIX или UNIX-подобных систем.

Я лично выбрал бы вариант MIMEDefang, предложенный Анджеем А. Филипом, но мне было интересно, как бы я написать это в скрипте Python, и пришел к следующему решению. Если MIMEDefang не подходит для вашей среды, вы можете попробовать его. Никаких гарантий, только протестировано на нескольких примерах сообщений

#!/usr/bin/python
import email
import sys

def remove_attachment(rootmsg,attachment_name):
    """return message source without the first occurence of the attachment named <attachment_name> or None if the attachment was not found"""
    for msgrep in rootmsg.walk():
        if msgrep.is_multipart():
            payload=msgrep.get_payload()
            indexcounter=0
            for attachment in payload:
                att_name = attachment.get_filename(None)
                if att_name==attachment_name:
                    del payload[indexcounter]
                    return rootmsg.as_string()
                indexcounter+=1

if __name__=='__main__':
    incontent=sys.stdin.read()
    try:
        rootmsg=email.message_from_string(incontent)
    except:
        sys.stderr.write("Message could not be parsed")
        sys.exit(1)
    src=remove_attachment(rootmsg,'image001.png')

    if src!=None:
        sys.stdout.write(src)
    else:
        sys.stdout.write(incontent)