3

Gmailと、ツールチップにタイトルが記載された新しいメールを受信した場合に通知するアプリケーションを使用しています。(GmailNotifier with Miranda-IM)私が受け取るメールのほとんどは読みたくないものであり、そのメールを削除するためだけに低速接続でGmailにログインしなければならないのは面倒です。プラグインはクローズドソースだと思います。

私は(失敗して)ログインして「トップ」の電子メール(最近受信したもの)を削除するスクリプトを書き込もうとしていました。しかし、これは私が思っていたほど簡単ではありません。

最初にimaplibを使用してみましたが、期待したメソッドが含まれていないことがわかりました。これはdbapi仕様に少し似ており、imap仕様が変更された場合に備えて最小限の機能しか含まれていません。次に、imap RFC(rfc3501)を読んでみました。途中で、メールクライアント全体を書きたくないことに気づいたので、代わりにpop3を使用することにしました。

poplibも最小限ですが、私が必要としているものがあるようです。ただし、pop3は、私がよく知っている順序でメッセージを並べ替えているようには見えません。受信した日付を確認したい場合は、ヘッダーを読み取るために、すべての電子メールでtop()またはretr()を呼び出す必要があります。

おそらく、すべてのメッセージヘッダーを繰り返し処理して、最新の日付を検索することもできますが、それは醜いです。可能であれば、メールボックス全体を解析しないようにします。また、メールボックスを「ポップ」して他のメッセージをダウンロードしたくありません。

今から6時間経ちましたが、始めたときほど解決策に近づいていません。シンプルなものを見落としていますか?私が試すことができる別のライブラリはありますか?(私は「チルカット」を見つけましたが、それは地獄に肥大化しており、標準ライブラリでこれを行うことを望んでいました)

4

1 に答える 1

4
import poplib

#connect to server
mailserver = poplib.POP3_SSL('pop.gmail.com')
mailserver.user('recent:YOURUSERNAME') #use 'recent mode'
mailserver.pass_('YOURPASSWORD') #consider not storing in plaintext!

#newest email has the highest message number
numMessages = len(mailserver.list()[1])

#confirm this is the right one, can comment these out later
newestEmail = mailserver.retr(numMessages)
print newestEmail

#most servers will not delete until you quit
mailserver.dele(numMessages)
mailserver.quit()

私は最近poplibと協力して、非常に原始的な電子メールクライアントを作成しました。一部のテストメールでメールサーバー(Gmailではない)を使用してこれをテストしましたが、正しく機能しているようです。最初にテストするために、ダミーの電子メールをいくつか送信します。

警告:

  • 「最近のモード」を使用していることを確認してください:http: //mail.google.com/support/bin/answer.py?answer = 47948
  • GmailアカウントでPOP3が有効になっていることを確認します:Gmail>設定>転送とPOP/IMAP>「すべてのメールでPOPを有効にする」

これがお役に立てば幸いです、それはあなたを動かすのに十分なはずです!

于 2010-02-14T06:50:39.873 に答える