3

サーバー(POP3)でメールを開くためにPythonを使用しています。各電子メールには、転送された電子メール自体である添付ファイルがあります。

添付ファイルから「To:」アドレスを取得する必要があります。

私はPythonを使って言語を学ぼうとしていますが、まだそれほど上手ではありません!

私がすでに持っているコードはこれです

import poplib, email, mimetypes

    oPop = poplib.POP3( 'xx.xxx.xx.xx' )
    oPop.user( 'abc@xxxxx.xxx' )
    oPop.pass_( 'xxxxxx' )

    (iNumMessages, iTotalSize ) = oPop.stat()

    for thisNum in range(1, iNumMessages + 1): 
          (server_msg, body, octets) = oPop.retr(thisNum)
          sMail = "\n".join( body )

          oMsg = email.message_from_string( sMail )

          # now what ?? 

メールクラスのインスタンスとしてメールがあることは理解していますが、添付ファイルにアクセスする方法がわかりません

私はそれを使用することを知っています

  sData = 'To'
       if sData in oMsg:
       print sData + "", oMsg[sData]

メインメッセージから「To:」ヘッダーを取得しますが、添付ファイルからそれを取得するにはどうすればよいですか?

私はもう試した

for part in oMsg.walk():
    oAttach = part.get_payload(1)

しかし、oAttach オブジェクトをどうすればよいかわかりません。私はそれを文字列に変えてから渡してみました

oMsgAttach = email.message_from_string( oAttach )

しかし、それは何もしません。私はPythonのドキュメントに少し圧倒されており、助けが必要です. 前もって感謝します。

4

1 に答える 1

1

代表的なメールが受信トレイにないと、これを処理するのは困難です (poplib を使用したことがありません)。そうは言っても、私のちょっとした調査から役立つかもしれないいくつかのこと:

まず第一に、python へのコマンド ライン インターフェースとdir()およびhelp()関数を大いに活用してください。help(oAttach)コードに, dir(oAttach)andをいつでも挿入print oAttachして、ループ中に何が起こっているかを把握できます。コマンド ライン インターフェイスに 1 行ずつ入力すると、さらに簡単になります。

あなたがする必要があると思うのは、それぞれの執着を調べて、それが何であるかを理解することです. 従来の電子メールの添付ファイルの場合、おそらく base64 でエンコードされているため、次のようなものが役立つ場合があります。

#!/usr/bin/python
import poplib, email, mimetypes

# Do everything you've done in the first code block of your question
# ...
# ...

import base64
for part in oMsg.walk():
    # I've removed the '1' from the argument as I think you always get the
    # the first entry (in my test, it was the third iteration that did it).
    # However, I could be wrong...
    oAttach = part.get_payload()
    # Decode the base64 encoded attachment
    oContent = b64decode(oAttach)
    # then maybe...?
    oMsgAttach = email.message_from_string(oContent)

メッセージのように見えることを確認するために、それぞれのケースでおそらく oAttach をチェックする必要があることに注意してください。sMail変数を取得したら、それを画面に出力します。次に、そこにあるようなものを探すことができますContent-Transfer-Encoding: base64。これにより、添付ファイルがどのようにエンコードされているかの手がかりが得られます。

私が言ったように、私は poplib、email、または mimetypes モジュールを使用したことがないので、それが役立つかどうかはわかりませんが、正しい方向に向けられるかもしれないと思いました.

于 2009-08-20T16:11:51.577 に答える