poplib

读取邮件内容

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()  # 获取邮件附载部分




原文地址:https://www.cnblogs.com/0916m/p/14054813.html