Python 收取邮件的附件名问题

plutolxl 2015-04-27 08:33:10
最近利用 Python 实现了下邮件的收取,但是在提取并保存邮件附件时遇到了以下问题 :

eml 邮件如下时:
filename="zhe shi yi feng ce shi you jian 20150427 1234567890123 &
123456.pdf";

提取的附件名会异常

但是附件名没有换行时,能正常提取。

...全文
380 3 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
panghuhu250 2015-04-29
  • 打赏
  • 举报
回复
你的函数里对filename做了多步处理. 在下面标出的#1, #2,...等位置中, 从哪一步开始结果变得不对?

def PareMessageAttachMent(mail,PATH,mailID):
   ...
          filename = part.get_filename() # 1
          ...
          filename=dh[0][0] # 2
          encodeStr=dh[0][1]
          if encodeStr != None:
             if charset == None:
                filename = filename.decode(encodeStr,'ascii')
             else:
                filename = filename.decode(encodeStr,charset)
          print filename                              # 3
          filename=os.path.split(filename)[1]                          #防止文件名出现全路径错误  # 4
          strinfo = re.compile('[\/\\\<>|?*:;"\r\n] ')
          filename1 = strinfo.sub('_',filename)                         # 5
          filename2 = os.path.normcase(filename1)               # 6
      
          print "filename2 is: %s "%filename2   
...
plutolxl 2015-04-27
  • 打赏
  • 举报
回复
1#为附件提取代码 当附件名只有一行时: print "filename2 is: %s "%filename2 正常 当 附件名换行时,如 filename="zhe shi yi feng ce shi you jian 20150427 1234567890123 & 123456.pdf"; print "filename2 is: %s "%filename2 显示的内容为 123456.pdfiszhe shi yi feng ce shi you jian 20150427 1234567890123 &
plutolxl 2015-04-27
  • 打赏
  • 举报
回复
def PareMessageAttachMent(mail,PATH,mailID): #print "Start extracting attachments, the attachment name is: %s "%PATH contenttype = None for part in mail.walk(): if not part.is_multipart(): contenttype = part.get_content_type() filename = part.get_filename() charset = part.get_charset() if filename==None: continue h=email.Header.Header(filename) dh=email.Header.decode_header(h) filename=dh[0][0] encodeStr=dh[0][1] if encodeStr != None: if charset == None: filename = filename.decode(encodeStr,'ascii') else: filename = filename.decode(encodeStr,charset) filename=os.path.split(filename)[1] #防止文件名出现全路径错误 strinfo = re.compile('[\/\\\<>|?*:;"\r\n] ') filename1 = strinfo.sub('_',filename) filename2 = os.path.normcase(filename1) print "filename2 is: %s "%filename2 if filename: ###解析邮件的附件内容 fn=PATH+'/'+filename2 if os.path.exists(fn)==False: try: f=open(fn,'wb') except: filenametmp = str(mailID)+'-'+random_str(12)+'.dat' #创建邮件附件失败时,尝试使用邮件ID+随机字符串 filenametmp1 = strinfo.sub('_',filenametmp) fn = PATH+'/'+filenametmp1 print "filename1 is: %s "%fn f=open(fn,'wb') try: f.write(base64.decodestring(part.get_payload())) except: pass f.close() else: continue

37,743

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • WuKongSecurity@BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧