展开讨论

创业与收入经验摘录 · 机器翻译

我一直在处理一些电子邮件相关的工作,我觉得IMAP大概有四件事情让人头疼: - 该…

我一直在处理一些电子邮件相关的事情,我觉得IMAP大概有四件事情让人很头疼: - 语法很难。我用lpeg写了一个解析器,我非常庆幸自己这么做了——如果随意地手动处理的话,结果不会很好。 - 它是一个异步协议。你可以向服务器发送很多请求,你必须给它们打上标签,以便之后能将它们与响应匹配起来。在客户端中,你通常不希望这么做;也就是说,你不希望在异步连接上进行这些事务性操作,并跟踪所有操作的状态。你希望像删除东西、重命名东西、发送东西等操作时,能够阻塞等待。 - IMAP是多用户的——它围绕着多个客户端同时访问同一个邮箱并流式传输更新的概念构建。当你构建电子邮件客户端时,这是一件你真的不想处理的事情。 - 有一些功能你基本上不应该使用;最大的一个就是搜索。甚至规格说明中也基本上说“祝你好运,使用这个吧”。…

源讨论IMAP内部是如何工作的原帖 75 条评论 · 导入时统计
5

社区评论 0

还没有社区评论,来聊聊你的看法。

原讨论中的回复 5

仅展示本次导入中包含的直接回复。中文为机器翻译,可查看英文原文。

MR

> 我认为这可能意味着每个非网页电子邮件客户端都像POP一样处理IMAP并保持自己的存储。我没有做过调查,但我会很惊讶这不成立。 我确定mutt不是这样。它只缓存邮件标题。

完整原文
PF

我发现服务器端的搜索功能如果服务器实现得当的话,工作得非常好。例如Dovecot的实现。 至于将IMAP当作POP来使用,是的,有一些客户端只是表面上支持"IMAP",只是为了在功能列表中多一个绿色的勾选框,这在他们的营销中显得更完整。但也有更专业的客户端。

完整原文
JC

> 有一些功能你基本上不应该使用;最大的问题是搜索。甚至规格说明中基本上说“祝你好运,使用这个吧”。 消息序列号。每个IMAP文件夹中的邮件都会从1-N编号,没有空缺,所以如果你删除了一封邮件,之后的所有邮件的消息序列号都会递减以填补空缺。但IMAP是多客户端的,其他连接也可能删除邮件。但服务器只能在某些特定时间点告诉你邮件已被删除,因此服务器必须为每个客户端保持消息序列号的状态,并仔细确保所有客户端保持同步……这在实践中很容易导致灾难。任何理智的客户端都会使用UID来处理所有事情(而任何理智的服务器都会实现所有UID扩展,以允许UID被用于所有事情)。 另一个有趣的地方…

完整原文
MJ

> 你可以向服务器发送大量请求,并且必须对它们进行标记,以便之后与响应匹配 是的,你可以通过标签将最终的OK/NO/BAD响应与原始命令匹配。令人烦恼的是,每个命令通常会通过“未标记的响应”发送大部分数据。而且IMAP服务器也可以在任何时候发送未经请求的未标记响应。在电子邮件客户端中正确处理所有这些响应是非常棘手的。实际上,通常你只是想发送一个命令,并获取该命令的所有数据,直到最终响应。IMAP客户端通常会打开多个连接来隔离命令。

完整原文
US

你可以将所有这些归为一个标题:“我们认为人们会通过telnet使用这个” 不,语法太复杂了,不能这样理解。更像是“我们认为文本协议更好”。 POP3和SMTP相对容易手动使用。而IMAP不是。

完整原文
在 Hacker News 阅读

尊重不同观点,分享具体经验。

登录后即可发帖、评论、转发和引用。