4

今はGmailボックスですが、遅かれ早かれ私はそれを拡大したいと思っています.

unreadライブの個人用メールボックス (受信トレイと送信トレイ) のコピーを別の場所に同期したいのですが、未読メッセージの状態に影響を与えたくありません。

どのタイプのアクセスがこれを最も簡単にしますか? IMAP が既読状態に影響するかどうかについての情報は見つかりませんが、メッセージを手動で未読にリセットできるようです。定義上、ポップは未読状態には影響しませんが、誰も pop を使用して Gmail にアクセスしていないようです。なぜですか?

4

6 に答える 6

5

IMAPの世界では、各メッセージにフラグがあります。各メッセージに個別のフラグを設定できます。メッセージをフェッチする場合、\Seenフラグを適用しなくても実際にメッセージを読み取ることができます。

ほとんどのメールクライアントは、メッセージが読み取られるときに\Seenフラグを適用します。したがって、メッセージがアプリの外部ですでに読み取られている場合は、\Seenフラグを削除する必要があります。

fyiと同じように...RFCからのフラグに関連する部分は次のとおりです。

システムフラグは、この仕様で事前定義されているフラグ名です。すべてのシステムフラグは「\」で始まります。特定のシステムフラグ(\Deletedおよび\Seen)には、他の場所で説明されている特別なセマンティクスがあります。現在定義されているシステムフラグは次のとおりです。

    \Seen
       Message has been read

    \Answered
       Message has been answered

    \Flagged
       Message is "flagged" for urgent/special attention

    \Deleted
       Message is "deleted" for removal by later EXPUNGE

    \Draft
       Message has not completed composition (marked as a draft).

    \Recent
       Message is "recently" arrived in this mailbox.  This session
       is the first session to have been notified about this
       message; if the session is read-write, subsequent sessions
       will not see \Recent set for this message.  This flag can not
       be altered by the client.

       If it is not possible to determine whether or not this
       session is the first session to be notified about a message,
       then that message SHOULD be considered recent.

       If multiple connections have the same mailbox selected
       simultaneously, it is undefined which of these connections
       will see newly-arrived messages with \Recent set and which
       will see it without \Recent set.
于 2009-10-14T14:14:48.797 に答える
3

IMAPのFETCHコマンドに.PEEKオプションがあり、/Seenフラグを明示的に設定しません。

RFC 3501のFETCHコマンドを見て、 57ページまで少し下にスクロールするか、「BODY.PEEK」を検索します。

于 2009-10-16T17:42:21.737 に答える
2

BODY.PEEK を使用する場合は、セクションを指定する必要があります。セクションについては、BODY[<section>]<<partial>> の下のIMAP Fetch Commandドキュメントで説明されています。

import getpass, imaplib

M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(BODY.PEEK[])')
    print 'Message %s\n%s\n' % (num, data[0][5])
M.close()
M.logout()

PS: Gene Woodを指定して回答を修正したかったのですが、編集が 6 文字未満だったため許可されませんでした (BODY.PEEK -> BODY.PEEK[])

于 2012-03-19T20:39:02.550 に答える
0

それが誰かを助けるなら、GAEはあなたがHTTPリクエストとして電子メールを受け取ることを可能にするので、今のところ私はそこに電子メールを転送しているだけです。

于 2009-12-01T21:16:32.100 に答える
0

上記の Dan Goldstein の回答をフォローアップするには、Python で「.PEEK」オプションを使用する構文は、IMAP4.fetch を呼び出して「 BODY.PEEK」を渡すことです。

これをpython docsの例に適用するには:

import getpass, imaplib

M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
    typ, data = M.fetch(num, '(BODY.PEEK)')
    print 'Message %s\n%s\n' % (num, data[0][5])
M.close()
M.logout()
于 2011-03-01T06:03:42.380 に答える