JavaMail API - 读取大型 outlook 邮箱 (>3000) 的邮件内容
JavaMail API - Reading a large outlook mailbox (>3000) for message content
我有一个需求,需要读取超过3000封邮件的邮箱。我需要阅读这些邮件,获取邮件内容并将正文送入另一个 api。处理几封邮件很容易(对我来说大约是 250 封),但之后速度明显变慢。这个 link 中接受的答案是
唯一的选择,还是有其他替代方法。
注意:我故意没有粘贴任何片段,因为我使用的是直接的方法,是的,我也确实使用了 FetchProfile。
JavaMail IMAP 性能通常由服务器的速度、所需的网络往返次数以及读取的数据量控制。使用 FetchProfile is essential to reducing the number of round trips. Don't forget to consider the IMAP-specific FetchProfile items.
JavaMail 将一次获取一个缓冲区的邮件内容。大消息显然需要多次缓冲区提取,因此需要多次往返。您可以通过将 mail.imap.fetchsize
property. Or you can disable these partial fetches and require it to fetch the entire contents in one operation by setting the mail.imap.partialfetch
属性 设置为 false 来更改缓冲区的大小(默认为 16K)。显然,如果正在读取大消息,后者将需要客户端上的大量内存。
JavaMail IMAP 提供程序不会(通常;见下文)在客户端缓存邮件内容,但它会缓存邮件 headers。当处理大量的消息时,通过调用 IMAPMessage.invalidateHeaders method. When using IMAPFolder.FetchProfileItem.MESSAGE 处理完一条消息后,使 headers 的缓存无效有时会有所帮助,消息内容被缓存,并且也会被上述方法无效打电话。
除此之外,您应该检查 JavaMail debug output 以确保只发出预期的 IMAP 命令,并且您没有在程序中执行会导致它发出不必要的 IMAP 命令的操作。您还可以查看协议命令的 time-stamps 以确定时间是花在服务器上还是客户端上。
只有在所有这些都未能产生可接受的性能之后,并且您确定性能问题不在服务器上(您无法修复),您才需要按照建议查看自定义 IMAP 命令在您提到的 link 中。
我有一个需求,需要读取超过3000封邮件的邮箱。我需要阅读这些邮件,获取邮件内容并将正文送入另一个 api。处理几封邮件很容易(对我来说大约是 250 封),但之后速度明显变慢。这个 link 中接受的答案是 唯一的选择,还是有其他替代方法。
注意:我故意没有粘贴任何片段,因为我使用的是直接的方法,是的,我也确实使用了 FetchProfile。
JavaMail IMAP 性能通常由服务器的速度、所需的网络往返次数以及读取的数据量控制。使用 FetchProfile is essential to reducing the number of round trips. Don't forget to consider the IMAP-specific FetchProfile items.
JavaMail 将一次获取一个缓冲区的邮件内容。大消息显然需要多次缓冲区提取,因此需要多次往返。您可以通过将 mail.imap.fetchsize
property. Or you can disable these partial fetches and require it to fetch the entire contents in one operation by setting the mail.imap.partialfetch
属性 设置为 false 来更改缓冲区的大小(默认为 16K)。显然,如果正在读取大消息,后者将需要客户端上的大量内存。
JavaMail IMAP 提供程序不会(通常;见下文)在客户端缓存邮件内容,但它会缓存邮件 headers。当处理大量的消息时,通过调用 IMAPMessage.invalidateHeaders method. When using IMAPFolder.FetchProfileItem.MESSAGE 处理完一条消息后,使 headers 的缓存无效有时会有所帮助,消息内容被缓存,并且也会被上述方法无效打电话。
除此之外,您应该检查 JavaMail debug output 以确保只发出预期的 IMAP 命令,并且您没有在程序中执行会导致它发出不必要的 IMAP 命令的操作。您还可以查看协议命令的 time-stamps 以确定时间是花在服务器上还是客户端上。
只有在所有这些都未能产生可接受的性能之后,并且您确定性能问题不在服务器上(您无法修复),您才需要按照建议查看自定义 IMAP 命令在您提到的 link 中。