python下载邮件excel附件



import poplib 
import email 
import datetime 
import time 
import os 
#import xlrd 
#import xlwt
import shutil
from email.parser import Parser 
from email.header import decode_header 
from email.utils import parseaddr 
import smtplib as sm
import email.mime.multipart 
import email.mime.text 
import time
import datetime
from email.mime.application import MIMEApplication 
from email import encoders
from email.mime.base import MIMEBase
from email.mime.text import MIMEText


yesterday = datetime.date.today() - datetime.timedelta(days=1)
m=yesterday.strftime("%Y%m%d")
msg=email.mime.multipart.MIMEMultipart()  

shutil.rmtree('E:\\zjzj\\wenjian\\')
os.mkdir('E:\\zjzj\\wenjian\\')  
  
# 输入邮件地址, 口令和POP3服务器地址: 
email = 'aaa@qq.com'
password = '*************'
pop3_server = 'imap.exmail.qq.com'
  
  
  
def decode_str(s):#字符编码转换 
  value, charset = decode_header(s)[0] 
  if charset: 
    value = value.decode(charset) 
  return value 
  
  
def get_att(msg): 
  import email 
  attachment_files = [] 
    
  for part in msg.walk(): 
    file_name = part.get_filename()#获取附件名称类型 
    contType = part.get_content_type() 
      
    if file_name:  
      h = email.header.Header(file_name) 
      dh = email.header.decode_header(h)#对附件名称进行解码 
      filename = dh[0][0] 
      if dh[0][1]: 
        filename = decode_str(str(filename,dh[0][1]))#将附件名称可读化 
        print(filename) 
        #filename = filename.encode("utf-8")
      if 'xls' in filename:
        data = part.get_payload(decode=True)#下载附件 
        att_file = open('E:\\zjzj\\wenjian\\' + filename, 'wb')#在指定目录下创建文件,注意二进制文件需要用wb模式打开 
        attachment_files.append(filename) 
        att_file.write(data)#保存附件 
        att_file.close() 
      return attachment_files 
  

def get_email_headers(msg):
  # 邮件的From, To, Subject存在于根对象上:
  headers = {}
  for header in ['From', 'To', 'Subject', 'Date']:
    value = msg.get(header, '')
    if value:
      if header == 'Date':
        headers['date'] = value
      if header == 'Subject':
        # 需要解码Subject字符串:
        subject = decode_str(value)
        headers['subject'] = subject
      else:
        # 需要解码Email地址:
        hdr, addr = parseaddr(value)
        name = decode_str(hdr)
        value = u'%s <%s>' % (name, addr)
        if header == 'From':
          from_address = value
          headers['from'] = from_address
        else:
          to_address = value
          headers['to'] = to_address
  content_type = msg.get_content_type()
  print ('head content_type: ', content_type)
  return headers      


        
# 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3() 
server = poplib.POP3_SSL(pop3_server) 
server.set_debuglevel(1) 
# 打印POP3服务器的欢迎文字: 
print(server.getwelcome().decode('utf-8')) 
# 身份认证: 
server.user(email) 
server.pass_(password) 
# 返回邮件数量和占用空间: 
print('Messages: %s. Size: %s' % server.stat()) 
# list()返回所有邮件的编号: 
resp, mails, octets = server.list() 
# 可以查看返回的列表类似[b'1 82923', b'2 2184', ...] 
#print(mails) 
index = len(mails) 
  
  
  
for i in range(index,0,-1): 
  #倒序遍历邮件 
  resp, lines, octets = server.retr(i) 
  # lines存储了邮件的原始文本的每一行, 
  #邮件的原始文本: 
  msg_content = b'\r\n'.join(lines).decode('utf-8',"ignore") 
  #解析邮件: 
  msg = Parser().parsestr(msg_content) 

  #message = email.message_from_string(filename.decode("utf-8"))
  #sender = email.utils.parseaddr(message.get('from'))[1]
  #获取邮件时间 
  date1 = time.strptime(msg.get("Date")[0:24],'%a, %d %b %Y %H:%M:%S') #格式化收件时间 
  date2 = time.strftime("%Y%m%d", date1)#邮件时间格式转换 

  if date2 < m:
      continue

 
      print(msg)
  f_list = get_att(msg)#获取附件 
    
      
    

server.quit()
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值