5

IMAP メールをフェッチし、Python 2 で完全に機能するコードがいくつかあります。Python3 では、次のエラーが発生します。

トレースバック (最後の最後の呼び出し):
ファイル "./mail.py"、295 行目、
item=return_message(x)
ファイル "./mail.py"、122 行、return_message の
結果、データ = mail.fetch(message_id 、"(RFC822)")
ファイル "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py"、460 行目、フェッチの
typ で、dat = self._simple_command(name, message_set, message_parts)
ファイル "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py"、1113 行
目、_simple_command で self._command_complete(name, self._command(name, *args)) を返す
ファイル "/Library/Frameworks/Python.framework/Versions/3.3/lib/python3.3/imaplib.py",_command の 883 行目
データ = データ + b' ' + arg
TypeError: バイトを int に連結できません

return_message 関数のコード:

result, data = mail.fetch(message_id, "(RFC822)")
raw_email = data[0][1]
email_message = email.message_from_string(raw_email)

ランタイム情報:

3.3.0 (v3.3.0:bd8afb90ebf2、2012 年 9 月 29 日、01:25:11)
[GCC 4.2.1 (Apple Inc. ビルド 5666) (ドット 3)]

4

1 に答える 1

11

message_setint ではなく文字列です。ドキュメントから:

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

文字列に直接変換するだけで十分です。

result, data = mail.fetch(str(message_id), "(RFC822)")
于 2012-12-29T10:23:30.500 に答える