import poplib
from email.header import decode_header
from email.mime.text import MIMEText
import email
#如何读取邮件
#第一步:用poplib把邮件的原始文本下载到本地;
#第二部:用email解析原始文本,还原为邮件对象。
read = poplib.POP3("pop.163.com") #如果使用pop.qq.com会报错
#read.set_debuglevel(1) # 可以打开或关闭调试信息:
read.user("zxl80455@163.com") #设置登陆账号
read.pass_("a70674") #设置登陆密码,是授权码
tongji = read.stat() #返回的是邮箱基本统计信息,返回的是两个参数,第一为邮件个数,第二是字节总数
str = read.top(tongji[0],0) #服务器将返回由参数标识的邮件前0行内容,最后str为一个列表,有三个元素
#由参数标识是指只有系统能识别,肉眼看不出来。
print(str) #str是一个元组,有三个元素,我们需要使用第二个元素,也就是str[1],它也是一个列表就能拿到邮件具体的信息
str2 = []
for x in str[1]: #循环str[1]中的所有元素并进行编码
try:
str2.append(x.decode()) #先尝试默认编码,如果不是的话尝试gbk编码,如果还不是就尝试big5编码
except:
try:
str2.append(x.decode('gbk'))
except:
str2.append(x.decode('big5'))
#这个方法能把string的邮件转换成email.message对象,msg是把经过编码的str2转化为
# 可识别的邮件信息,并且每行一个信息,join用来链接字符串
msg = email.message_from_string('\n'.join(str2))
print(msg)
biaoti = decode_header(msg['subject'])
print(biaoti)
if biaoti[0][1]: #如果biaoti有第二个元素,说明有编码信息,比如第二个元素是utf-8
#使用biaoti的第一个元素去解码biaoti的第0个元素
biaoti2 = biaoti[0][0].decode(biaoti[0][1])
else:
biaoti2 = biaoti[0][0]
print(biaoti2)