1. ホーム
  2. パイソン

[解決済み】 'str' オブジェクトに 'decode' 属性がない。Python 3 エラー?

2022-03-31 19:43:14

質問

以下は私のコードです。

import imaplib
from email.parser import HeaderParser

conn = imaplib.IMAP4_SSL('imap.gmail.com')
conn.login('[email protected]', 'password')
conn.select()
conn.search(None, 'ALL')
data = conn.fetch('1', '(BODY[HEADER])')
header_data = data[1][0][1].decode('utf-8')

この時点で、エラーメッセージが表示されます。

AttributeError: 'str' object has no attribute 'decode'

Python 3にはもうデコード機能はないんですよね? どうしたら直せますか?

また、で。

data = conn.fetch('1', '(BODY[HEADER])')

1通目のメールだけを選択しています。すべて選択するにはどうしたらよいですか?

解決方法を教えてください。

であるオブジェクトをデコードしようとしています。 すでにデコードされている . あなたが持っているのは str の場合、もうUTF-8からデコードする必要はありません。

を削除するだけです。 .decode('utf-8') の部分があります。

header_data = data[1][0][1]

については fetch() の呼び出しでは、最初のメッセージだけを明示的に要求しています。より多くのメッセージを取得したい場合は、範囲を指定してください。詳しくは ドキュメント :

メッセージセット オプションは、処理するメッセージを1つまたは複数指定する文字列です。これは、単純なメッセージ番号 ( '1' ) 、メッセージ番号の範囲 ( '2:4' )、またはカンマで区切られた連続しない範囲のグループ( '1:3,6:9' ). 範囲には,無限大の上限を示すアスタリスクを含めることができる ( '3:*' ).