赞
踩
以163邮箱为例,点击设置→POP3/SMTP/IMAP
点击开启
main.py 借鉴其他代码来进行修改: python+pop3进行附件下载.
// An highlighted block #!/usr/bin/env python3 # -*- coding: utf-8 -*- #poplib库 用来从pop3收取邮件 import poplib #email 用来处理邮件信息的库 import email #datetime 用来组成日期的库 import datetime import time import os from email.parser import Parser from email.header import decode_header from email.utils import parseaddr # 输入邮件地址, 验证码和POP3服务器地址: email = 'xxx@163.com' password = 'xxx' pop3_server = 'pop.163.com' def decode_str(s): # 字符编码转换 value, charset = decode_header(s)[0] if charset: value = value.decode(charset) return value def mkdir(path): if not os.path.exists(path): os.makedirs(path) print(path) else: pass 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])) # 将附件名称可读化 subject = decode_str(msg["subject"]).rstrip() print(subject+"\\"+filename) # filename = filename.encode("utf-8") data = part.get_payload(decode=True) # 下载附件 source_dir = os.path.join('G:\\研一大文件\\课外事\\大数据作业\\test\\',subject) mkdir(source_dir) att_file = open(os.path.join(source_dir,filename), 'wb') # 在指定目录下创建文件,注意二进制文件需要用wb模式打开 attachment_files.append(filename) att_file.write(data) # 保存附件 att_file.close() return attachment_files # 连接到POP3服务器,有些邮箱服务器需要ssl加密,对于不需要加密的服务器可以使用poplib.POP3() # server = poplib.POP3_SSL(pop3_server) server = poplib.POP3(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) index,_ = server.stat() for i in range(index, 0, -1): # 倒序遍历邮件 resp, lines, octets = server.retr(i) # lines存储了邮件的原始文本的每一行, # 邮件的原始文本: msg_content = b'\r\n'.join(lines).decode('utf-8') # 解析邮件: msg = Parser().parsestr(msg_content) # print(decode_str(msg["subject"])) # 获取邮件时间 date1 = time.strptime(msg.get("Date")[0:24], '%a, %d %b %Y %H:%M:%S') # 格式化收件时间 date2 = time.strftime("%Y%m%d", date1) # 邮件时间格式转换 if (date2 <='20200607') & (date2 > '20200519'): print("正在获取附件中") f_list = get_att(msg) # 获取附件 else: break # print_info(msg) server.quit()
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。