4

现在它是一个 gmail 盒子,但迟早我希望它能够扩展。

我想在其他地方同步实时个人邮箱(收件箱和发件箱)的副本,但我不想影响unread任何未读邮件的状态。

什么类型的访问将使这变得最简单?如果 IMAP 会影响阅读状态,我找不到任何信息,但似乎我可以手动将邮件重置为未读。根据定义,pop 不会影响未读状态,但似乎没有人使用 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 回答
1

没有人使用 POP,因为他们通常需要IMAP 的额外功能,例如跟踪消息状态。当该功能只会妨碍您并需要解决方法时,我认为使用 POP 是您最好的选择!-)

于 2009-10-14T04:52:40.390 回答
0

如果它对任何人都有帮助,GAE 允许您以HTTP 请求的形式接收电子邮件,所以现在我只是在那里转发电子邮件。

于 2009-12-01T21:16:32.100 回答
0

为了跟进Dan Goldstein 上面的回答,在 python 中,使用“.PEEK”选项的语法是调用IMAP4.fetch并将其传递给“ BODY.PEEK

要将其应用于python 文档中的示例:

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 回答