我已经配置了 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 用户的负担。
[...]
MIMEDefang 是免费软件:它根据 GNU 通用公共许可证条款发布。它可在 Linux、FreeBSD、Solaris 和大多数其他 UNIX 或类 UNIX 系统上运行。