Python と imaplib を使用して IMAP からメールを取得しています。この特定のケースでは、To: アドレスに問題があります。
エンコードされた To: フィールドを抽出し、アドレスを分離してから、それぞれのデコードを試みます。この特定の文字列に問題があります。Python の decode_header 関数を使用して、Quoted-Printable/Base64 エンコーディングをデコードしています。エンコードされたものから始めます:
'=?utf-8?b?vmfzy28gugf0csoty2lv?= <vasco.patricio.pessoal@gmail.com>'
Vasco Patrício <vasco.patricio.pessoal@gmail.com>
(私の名前とメールアドレス)のはずです。予想どおり、decode_header は、エンコードされた部分文字列とそのエンコーディングのセットを返します。その結果、次の 2 つのタプルの配列が生成されます。
[('\xbeg\xf3\xcbo \xba\x07\xf4r\xca-\xcbio', 'utf-8'), ('<vasco.patricio.pessoal@gmail.com>', None)]
ただし、この非常に単純なコードを使用して最初のタプルをデコードしようとすると:
for part in decoded_parts:
if part[1]:
part_text = part[0].decode(part[1])
else:
part_text = part[0]
UnicodeDecodeError を取得します。
UnicodeDecodeError at /api/refresh/emails/
'utf8' codec can't decode byte 0xbe in position 0: invalid start byte
コンソールからデコードしようとすると、同じ例外が発生することを確認しています。
decode_header は、有効なデコード可能な文字列をエンコーディングとともに返すことになっていませんか?
ありがとうございました