读取邮件内容
import re
from email.parser import Parser
import poplib
from email.header import decode_header
def decodeMsgHeader(header):
"""
解码头文件
:param header: 需解码的内容
:return:
"""
value, charset = decode_header(header)[0]
if charset:
value = value.decode(charset)
return value
def decodeBody(msgPart):
"""
解码内容
:param msgPart: 邮件某部分
"""
# 判断邮件内容的类型,text/html
contentType = msgPart.get_content_type()
textContent = ""
if contentType in ["image/png","application/octet-stream"]:
return
if contentType == 'multipart/alternative': #寻找当前part的最后一个负载,即为正文
msgPart = msgPart.get_payload()[-1]
#not (contentType == 'text/plain' or contentType == 'text/html')
content = msgPart.get_payload(decode=True)
charset = msgPart.get_charset()
if charset is None:
contentType = msgPart.get('Content-Type', '').lower()
position = contentType.find('charset=')
if position >= 0:
charset = contentType[position + 8:].strip()
if charset:
textContent = content.decode(charset)
return textContent
poplib._MAXLINE=20480
userAdr = "@s.cn"
userPwd = "!"
popHost = "pop.qiye.aliyun.com"
pop3Server = poplib.POP3(popHost)
pop3Server.user(userAdr)
pop3Server.pass_(userPwd)
"""获取邮件数量和占用空间"""
messageCount, mailboxSize = pop3Server.stat()
"""获取邮件请求返回状态码、每封邮件的字节大小(b'第几封邮件 此邮件字节大小')、"""
response, msgNumOctets, octets = pop3Server.list()
""" 获取任意一封邮件的邮件对象【第一封邮件的编号为1,而不是0】"""
# 获取最后一封
response, msgLines, octets = pop3Server.retr(messageCount)
# 第一封
response, msgLines, octets = pop3Server.retr(1)
# msgLines中为该邮件的每行数据,先将内容连接成字符串,再转化为email.message.Message对象
msgLinesToStr = b"
".join(msgLines).decode("utf8", "ignore")
messageObject = Parser().parsestr(msgLinesToStr)
# 发件时间
msgDate = messageObject["date"]
# 标题
senderContent = messageObject["From"]
# parseaddr()函数返回的是一个元组(realname, emailAddress)
senderRealName, senderAdr = parseaddr(senderContent)
# 将加密的名称进行解码
senderRealName = decodeMsgHeader(senderRealName)
msgHeader = messageObject["Subject"]
# 对头文件进行解码
msgHeader = decodeMsgHeader(msgHeader )
messageObject.is_multipart(): # 判断邮件是否由多个部分构成
messageParts = messageObject.get_payload() # 获取邮件附载部分