JavaMail API - 读取大型 Outlook 邮箱 (>3000) 以获取邮件内容



我需要阅读一个包含3000多封邮件的邮箱。我需要阅读这些邮件,获取它们的邮件内容,并将正文输入另一个api。这很容易处理几封邮件(对我来说大约是250封),但在那之后,速度明显变慢了。此链接中接受的答案吗唯一的选择,或者还有其他的选择。

注意:我故意不粘贴任何片段,因为我使用了直接的方法,是的,我也使用了FetchProfile。

JavaMail IMAP的性能通常由服务器的速度、所需的网络往返次数和读取的数据总量来控制。使用FetchProfile对于减少往返次数至关重要。不要忘记考虑IMAP特定的FetchProfile项目。

JavaMail将一次从缓冲区中获取消息内容。大型消息显然需要多次缓冲区获取,因此需要多次往返。您可以通过设置mail.imap.fetchsize属性来更改缓冲区的大小(默认为16K)。或者,您可以禁用这些部分获取,并通过将mail.imap.partialfetch属性设置为false,要求它在一次操作中获取全部内容。显然,如果正在读取大型消息,后者将需要客户端上的大量内存。

JavaMail IMAP提供程序不会(通常;请参阅下文)缓存客户端上的邮件内容,但会缓存邮件头。当处理大量消息时,有时通过调用IMAPMessage.invalidateHeaders方法来处理消息时,使标头缓存无效会很有帮助。当使用IMAPFolder.FetchProfileItem.MESSAGE时,消息内容是缓存的,也会被上述调用无效。

除此之外,您应该检查JavaMail调试输出,以确保只发出预期的IMAP命令,并且您没有在程序中执行会导致程序发出不必要的IMAP命令的操作。您还可以查看协议命令的时间戳,以确定时间是花在服务器上还是花在客户端上。

只有在所有这些都未能产生可接受的性能,并且您确信性能问题不在服务器上(您无法解决)之后,您才需要按照您提到的链接中的建议查看自定义IMAP命令。

相关内容

最新更新