Python脚本剥离邮件的附件的勘误。(Python email模块存在BUG)

#!/usr/bin/python

import os
import sys
import email
import getopt

def usage():
    print '''Help Information:
-i: eml file you want to decode
-d: path where you want to echo
-h: help'''

def main():
    if sys.argv[1:]==[]:
        sys.argv[1:]=['-h']

    opts,args=getopt.getopt(sys.argv[1:], 'i:d:h')

    for o, k in opts:
        if o=='-h':
            usage()
            sys.exit()
        if o=='-i':
            msgfile=k
        if o=='-d':
            loc_path=k
    if 'loc_path' not in locals():
        loc_path='./'

    fp = open(msgfile)
    msg = email.message_from_file(fp)
    fp.close()

    counter = 1
    for part in msg.walk():
        if part.get_content_maintype() == 'multipart':
            continue
        filename = part.get_filename()
        if not filename:
            continue
        counter += 1
        fp = open(os.path.join(loc_path, filename), 'wb')
        fp.write(part.get_payload(decode=True))
        fp.close()

if __name__ == '__main__':
    main()

原始脚本是这样的,但是这段代码有一个bug。所剥离的附件不一定是原文件名。例如附件前面有一个空格。则这个程序会把空格清除掉。

以上的脚本并没有错。问题在于python的 email模块的中 get_filename() 函数存有BUG。是python语言这个版本自身存在的问题。

同一个邮件文件,使用 ripmime -i 和 使用这个脚本 得出来的附件名称有出处。

在python命令行下:

import email
fp=open('sample.eml')
msg=email.message_from_file(fp)
for part in msg.walk():
    filename=part.get_filename()
print filename

得到的结果文件前面的空格被剔除掉了。如果有兴趣的同学可以尝试一下, Python 2.7 是否存在这样的BUG。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值