PYTHON如何自动处理邮件(四)——python获取邮件文本

如何转码,email有专门的工具。
网上说的是encode为UTF-8然后读取,我发现这样BUG多,既然邮件是bytes,就按照bytes读取。

当配好句柄以后(我将句柄设置为email)

        mail=p.retr(i)[1]
        mail=b'\n'.join(mail)
        msg=email.message_from_bytes(mail)

即可获得一个邮件正文。

其中msg就是一个处理邮件的类。

通过email中的waik()命令遍历所有程序体。
然后getpayload
有人说:网上需要multipart判断,但是按照我的经验:用BYTES一读不会出现问题,会扁平化。
用创建文件为例:

C:\
C:\d1
c:\d2
c:\d3\s1

然后读取完了就会:d1、d2、s1,无视multipart的问题……

get_content_charset()获取该part的编码。
然后,调用get_payload(decode=True)转化为bytes,然后对bytes进行编码decode,即可获取文本正体。

def get_file(msg):
    data_char=''
    for part in msg.walk():
        part_charset=part.get_content_charset()
        print(part_charset)
        part_type=part.get_content_type()
        #print(part_type)
        if part_type=="text/plain" or part_type=='text/html':
            data=part.get_payload(decode=True)
            try:
                data=data.decode(part_charset,errors="replace")
            except:
                data=data.decode('gb2312',errors="replace")
            data=html_to_plain_text(data)
            data_char=data_char+'\n'+data
    return data_char+'\n'

当文件进行处理的时候,会获取两个部分:html部分和纯文本部分。
通过这个函数可以将html转化为text文本。
我自己对这个东西不太了解,所以没的说……

import re
from html import unescape

#这个程序的作用是为了将html转化成txt文本,转化能力还不错……
def html_to_plain_text(html):
    text = re.sub('<head.*?>.*?</head>', ' ', html, flags=re.M | re.S | re.I)
    text = re.sub(r'<a\s.*?>', ' HYPERLINK ', text, flags=re.M | re.S | re.I)
    text = re.sub('<.*?>', ' ', text, flags=re.M | re.S)
    text = re.sub(r'(\s*\n)+', '\n', text, flags=re.M | re.S)
    return unescape(text)

通过这个处理方式处理的邮件结果是(为了加密我删除了一点敏感信息):

<[email protected]>
 <[email protected]>
你好!为高新专家装维人员,因前期村的情况,还请协助恢复原有权限,谢谢



省公司领导:
  您好!
为高新专家装维人员,因前期村的情况,还请协助恢复原有权限,谢谢
 您好!  为高新专家装维人员,因前期村的情况,还请协助恢复原有权限,谢谢   


会出现重复文本的问题。

如果想要无格式文本,那么只读取text/plain即可。我是为了不漏信息,所以同时采集html和plain的信息

猜你喜欢

转载自blog.csdn.net/weixin_45642669/article/details/113592016