1

Pythonで「imaplib」を使用してGmailアカウントからメールを取得しています。ただし、メールの内容、添付ファイルのタイトルを知りたいだけですが、添付ファイル全体をダウンロードする必要はありません。

デフォルトでは、

myGmail = imaplib.IMAP4_SSL(...)
....
(respCode, data) = myGmail.fetch(mailUid, 'RFC822')

返信データにテキストとしてエンコードされた添付ファイル全体を含む、電子メールのすべての部分が返されます。これは、巨大で不要な場合があります。

私は答えを見つけるためにインターネットとstackOverflowで検索しました。それらの多くは使用することに言及しました

myGmail.fetch(mailUid, 'BODYSTRUCTURE')

最初に電子メールの構造を決定し、次にダウンロードする部分を特定します。また、imap4プロトコルに関するRFC 3501のドキュメントも読みました。このドキュメントには、使用できると記載されています

BODY [] <>を使用して、Fetchコマンドで特定のボディパーツをダウンロードします。

しかし、私は次のようにpythonimaplibで多くのコマンドを試しました。

(rCode, data) = myGmail.fetch(mailUid, 'BODY[0]')
(rCode, data) = myGmail.fetch(mailUid, 'BODY0')
(rCode, data) = myGmail.fetch(mailUid, 'BODY[TEXT]')

しかし、それらはすべてエラーメッセージで失敗しました:

エラー:FETCHコマンドエラー:BAD['コマンドを解析できませんでした']

だから誰もがGmail用のpythonimaplibでこのコマンドを使用する方法を教えてもらえますか?

参考までに、上記の例の電子メールのBODYSTRUCTUREは次のとおりです。

(BODY 
 (
  (
    (
      ("TEXT" "PLAIN" ("CHARSET" "us-ascii") NIL NIL "QUOTED-PRINTABLE" 1742 33)
      ("TEXT" "HTML" ("CHARSET" "us-ascii") NIL NIL "QUOTED-PRINTABLE" 17976 485) "ALTERNATIVE"
    )
    (
      "IMAGE" "JPEG" 
      ("NAME" "image001.jpg") "<image001.jpg@01CD029F.6831C440>" "image001.jpg" "BASE64" 4070
    ) 
    "RELATED"
  )
  ("APPLICATION" "PDF" ("NAME" "SAC 2012.pdf") NIL "SAC 2012.pdf" "BASE64" 20638)
  "MIXED"
 )
 )

ありがとう!!!

4

1 に答える 1

2

BODY[0]に置き換えるだけ(BODY[1])です。

于 2013-03-24T10:55:21.220 に答える