立即学习:https://edu.csdn.net/course/play/24797/282213?utm_source=blogtoedu
import poplib import email.parser, email.policy # 创建邮件的连接 # conn= poplib.POP3('pop3.qq.com',110); conn = poplib.POP3_SSL('pop.qq.com', 995) conn.set_debuglevel(1) print(conn.getwelcome().decode('utf-8')) # 账户 conn.user('3124803200@qq.com') # 密码 conn.pass_('************') # 统计邮箱信息 num, totaolSize = conn.stat() print('邮件数量:', num) print('邮件大小:', totaolSize) # 统计邮件的列表 resp, mails, r = conn.list() print('响应:', resp) print('列表:', mails) # 获取最后一封邮件 respo, mailDa, r = conn.retr(mails.__len__()) print('响应:', respo) print('数据:', mailDa) # # 将邮件数据恢复成emailMessage()对象 data = b'\r\n'.join(mailDa) # msg 代表邮件 msg = email.parser.BytesParser(policy=email.policy.default).parsebytes(data) print(type(msg)) print('发件人:', msg['from']) print('收件人:', msg['to']) print('主题:', msg['subject']) print('第一个收件人用户名:', msg['to'].addresses[0].username) print('第一个发件人用户名:', msg['from'].addresses[0].username) # 遍历邮件的内容 每一个都是一个part for part in msg.walk(): # multipart 代表邮件的容器,无需处理 if part.get_content_type() == 'multipart': continue # text 代表邮件的正文 elif part.get_content_type() == 'text': print('正文:', part.get_content()) # 剩下的都是附件 else: # 得到附件名称 filename = part.get_filename() print(filename) if filename: # 写入本地磁盘 # print('+'*60) # print(part.get_payload()) with open(filename, 'wb', True) as f: f.write(part.get_payload(decode=True)) conn.quit()