PYTHONはどのように電子メールを自動的に処理しますか(4)-pythonは電子メールテキストを取得します

トランスコードの方法、電子メールには特別なツールがあります。
インターネット上では、エンコードはUTF-8と言われていますが、バグが多いことがわかりました。メールはバイトなので、バイト単位で読み取られます。

ハンドルが設定されている場合(ハンドルを電子メールに設定しました)

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

あなたはメッセージ本文を得ることができます。

その中で、msgはメールを処理するためのクラスです。

電子メールのwaik()コマンドを使用して、すべてのプログラム本体をトラバースします。
次に
getpayloadの誰かが次のように述べました。インターネットではマルチパートの判断が必要ですが、私の経験によれば、BYTESに問題はなく、フラット化されます。
例としてファイルの作成を取り上げます。

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

それを読んだ後、それは次のようになります:d1、d2、s1、マルチパートの問題を無視します...

get_content_charset()は、パーツのエンコーディングを取得します。
次に、get_payload(decode = True)を呼び出してバイトに変換し、バイトをエンコードおよびデコードしてテキスト本文を取得します。

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部分とプレーンテキスト部分の2つの部分が取得されます。
この関数を使用して、htmlをテキストテキストに変換できます。
私自身はこのことについてあまり知らないので、言いませんでした...

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とプレーンの両方の情報を同時に収集します

おすすめ

転載: blog.csdn.net/weixin_45642669/article/details/113592016