用python 处理邮件附件

本文介绍了一种使用Python解析.eml格式邮件中的附件并保存至本地的方法。通过遍历邮件内容,可以识别并处理多种类型的附件,实现自动下载。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 有时你的电脑上恰好没有 邮件阅读器,或者是附件被OE禁止访问了,郁闷啊,附件里边可能是很重要的文件,没法打开。如果你的电脑上装了python 的话,用下边一段代码就可以很快地把你的邮件中的附件完完整整的解析出来,并保存在你的电脑上。

 首先在你的电脑上e盘里建个mail 文件夹,里边再建个attach文件夹,把你的邮件(.eml)拷到mail 文件夹里,运行下边的代码就可以了。你的附件就保存在attach 文件夹里了,呵呵。

 

import string,time,os
import email
from email.Header import Header
from email.Header import decode_header
from email.MIMEMultipart import MIMEMultipart
from email.MIMEText import MIMEText
from email import Encoders
import base64

def showMessage(mail):
    
if mail.is_multipart():
        
for part in mail.get_payload():
            showMessage(part)
    
else:
        types
=mail.get_content_type()
        
if types=='text/plain':
            
try:
               stmp
=mail.get_payload(decode=True)
               
print stmp
            
except:
               
print '[*001*]BLANK'
               
        
elif types=='text/base64':
            
try:
               stmp
=base64.decodestring(mail.get_payload())
               
print stmp
            
except:
               
print '[*001*]BLANK'



def showMessage4(mail):
    
for part in mail.walk():
        contenttype
=part.get_content_type()
        
if contenttype=='text/plain':
            
try:
               
print part.get_payload(decode=True)
            
except:
               
print ''
        
elif contenttype=='text/base64':
            
try:
                
print base64.decodestring(part.get_payload())
            
except:
                
print ''
            
def PareMessageAttachMent(mail):
   
global PATH
   count
=0
   ErrorList
=[]
   
   
for part in mail.walk():
      contenttype 
= part.get_content_type() 
      filename 
= part.get_filename()
      
if filename==None:
          
continue
      filename
=email.Header.decode_header(filename)[0][0]
      filename
=os.path.split(filename)[1]                          #防止文件名出现全路径错误
      
      
if filename:                                                 ###解析邮件的附件内容
         fn=PATH+filename
         
if os.path.exists(fn)==False:           
            f
=open(fn,'wb')
            
try:
               f.write(base64.decodestring(part.get_payload()))
            
except:
               
pass
            f.close()
         
else:
            
continue


PATH
='e:/mail/Attach/'

files
=os.listdir('e:/mail')
id
=0
for eachfile in files:
  
if os.path.splitext(eachfile)[1].lower()=='.eml':
    mail
=email.message_from_file(open('e:/mail/'+eachfile))
    mail[
'subject'],mail.get('subject')
    mail[
'From'],mail.get('From')
    mail[
'To'],mail.get('To')
    mail[
'date'],mail.get('date')
    subject 
= email.Header.decode_header(mail['subject'])[0][0]
    subcode
=  email.Header.decode_header(mail['subject'])[0][1]
    FromAddr
=email.Header.decode_header(mail['From'])[0][0]
    ToAddr
=email.Header.decode_header(mail['To'])[0][0]
    date
=email.Header.decode_header(mail['date'])[0][0]

    
print '   ********* mail ',id+1,' *********'
    id
=id+1

    
print eachfile
    showMessage(mail)
    PareMessageAttachMent(mail)
    
print ' '

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值