poplib获取邮件内容转化为Html格式

import poplib
import email
from email.parser import Parser
from email.header import decode_header
from email.utils import parseaddr
from bs4 import BeautifulSoup


def decode_str(s):
    return s
    value, charset = decode_header(s)[0]
    if charset:
        value = value.decode(charset)
    return value


def guess_charset(msg):
    # 先从msg对象获取编码:
    charset = msg.get_charset()
    if charset is None:
        # 如果获取不到,再从Content-Type字段获取:
        content_type = msg.get('Content-Type', '').lower()
        pos = content_type.find('charset=')
        if pos >= 0:
            charset = content_type[pos + 8:].strip()
    return charset


def get_email_headers(msg):
    headers = {}
    for header in ['From', 'To', 'Subject', 'Date']:
        value = msg.get(header, '')
        if value:
            if header == 'Date':
                headers['date'] = value
            if header == 'Subject':
                subject = decode_str(value)
                headers['subject'] = subject
            else:
                hdr, addr = parseaddr(value)
                name = decode_str(hdr)
                value = u'%s <%s>' % (name, addr)
                if header == 'From':
                    from_address = value
                    headers['from'] = from_address
                else:
                    to_address = value
                    headers['to'] = to_address
    return headers


# indent用于缩进显示:
def get_email_cntent(message):
    j = 0
    content = ''
    for part in message.walk():
        j = j + 1
        file_name = part.get_filename()
        contentType = part.get_content_type()
        if file_name: # 保存附件
            pass
        elif contentType == 'text/plain' or contentType == 'text/html':
            data = part.get_payload(decode=True)
            charset = guess_charset(part)
            if charset:
                charset = charset.strip().split(';')[0]
             #   data = data.decode(charset)
            content = data
    return content


if __name__ == '__main__':
    emailaddress = ''
    password = ''
    pop3_server = ''
    server = poplib.POP3(pop3_server)
    print(server.getwelcome())
    server.user(emailaddress)
    server.pass_(password)
    messagesCount, messagesSize = server.stat()
    print('邮件数量:', messagesCount)
    print('占用空间:', messagesSize)
    resp, mails, octets = server.list()
    print('------ resp ------')
    print(resp)
    print('------ mails ------')
    print(mails)
    print('------ octets ------')
    print(octets)

    print("****************要第几篇就传几*******************************************************************")
    resp, lines, octets = server.retr(423)
    msg_content = "" ;
    for le in lines:
        msg_content = msg_content + str(le, encoding = "utf-8")
        msg_content = msg_content + "\n"

    msg = Parser().parsestr(msg_content)
    msg_headers = get_email_headers(msg)
    content = get_email_cntent(msg)
    print('subject:', msg_headers['subject'])
    print('from_address:', msg_headers['from'])
    print('to_address:', msg_headers['to'])
    print('date:', msg_headers['date'])
    bs = BeautifulSoup(content, "lxml")
    print(bs.prettify())

    server.quit()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值