用于解析电子邮件消息以删除特定名称附件的脚本或工具

用于解析电子邮件消息以删除特定名称附件的脚本或工具

我已经配置了 Redmine 电子邮件集成,虽然它很棒,但一个主要的烦恼是人们的签名中包含公司徽标,然后这些徽标会发布到他们通过电子邮件更新的每张票​​上。我知道这不是一个完美的解决方案,但我想通过管道传输一个脚本,该脚本会从消息中删除名为“image001.png”的附件,这样我就可以将其传输到处理程序。是否有可用的工具来帮助解决这个问题,还是我必须从头开始?

前:alias > mailhandler.rb

后:alias > parser.script > mailhandler.rb

答案1

我个人会选择 Andrzej A. Filip 建议的 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)

答案2

您可以使用MIME去方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 系统上运行。

相关内容