Я настроил интеграцию электронной почты 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 с медленными модемными ссылками.
[...]
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)