接收邮件脚本

发布时间 2023-09-16 20:45:15作者: donfag

第一步:用poplib模块把邮件的原始文本下载到本地。

第二步:用email模块解析原始文本,还原为邮件对象。

 1 import poplib
 2 from email.parser import Parser
 3 from email.header import decode_header
 4 from email.utils import parseaddr
 5 
 6 #邮件地址、口令、POP3服务器
 7 email = "abc@qq.com"
 8 passwd = "**********"
 9 pop3_server = "mail.qq.com"
10 #连接到POP3服务器,如果开启SSL,就使用poplib.POP3_SSL
11 server = poplib.POP3_SSL(pop3_server)
12 #可以打开或关闭调试信息
13 server.set_debuglevel(1)
14 #打印POP3服务器的欢迎文字
15 print(server.getwelcome().decode("utf-8"))
16 #身份认证
17 server.user(email)
18 server.pass_(passwd)
19 #stat()返回邮件数量和占用空间
20 print("邮件数量:%s个。大小:%.2fMB" % (server.stat()[0],server.stat()[1]/1024/1024))
21 #list()返回所有邮件的编号
22 resp,mails,octets, = server.list()
23 #获取最新一封邮件,注意索引号从1开始,最新的邮件索引即为邮件的个数
24 index = len(mails)
25 resp,lines,octets = server.retr(index)
26 #lines存储了邮件的原始文本的每一行可以获取整个邮件的原始文本
27 msg_content = b"\r\n".join(lines).decode("utf-8")
28 #稍后解析出邮件
29 msg = Parser().parsestr(msg_content)
30 
31 def decode_str(s):
32     value,charset = decode_header(s)[0]
33     if charset:
34         value = value.decode(charset)
35     return value
36 print("解析获取到的邮件内容如下:\n--------------begin--------------")
37 #打印发件人信息
38 print(f"{decode_str(parseaddr(msg.get('From',''))[0])}<{decode_str(parseaddr(msg.get('From',''))[1])}>")
39 #打印收件人信息
40 print(f"{decode_str(parseaddr(msg.get('To',''))[0])}<{decode_str(parseaddr(msg.get('To',''))[1])}>")
41 #打印主题信息
42 print(decode_str(msg["Subject"]))
43 #打印第一条正文信息
44 part0 = msg.get_payload()[0]
45 content = part0.get_payload(decode=True)
46 print(content.decode(part0.get_content_charset()))
47 print("--------------end--------------")
48 #可以根据邮件索引号直接从服务器删除邮件
49 #server.dele(index)
50 #关闭连接
51 server.quit()