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()
python下载邮件excel附件
最新推荐文章于 2024-01-30 10:39:07 发布