java - 如果收件箱中的邮件数量超过 int 范围会怎样?

标签 java email jakarta-mail

我必须使用 POP3 使用 JavaMail 不断阅读新电子邮件。

我要实现这样的解决方案:

  • 统计所有邮件(一次,在申请开始时)
  • 设置lastRead为邮件编号
  • 定期轮询收件箱,然后:
    • 统计所有邮件并检查它们的数量是否大于lastRead
    • 如果是,阅读新邮件并更新lastRead

它在小样本上工作正常,但我想知道如果服务器上的邮件数量超过 2147483647 会发生什么。

我看到如果我删除邮件(从普通客户端),它不会影响服务器返回到 JavaMail 的邮件数量或它们的数量。但是如果邮箱会溢出怎么办?我是否必须停止并重新开始申请?

Folder 的方法将 int 作为参数(我想到了我使用的 getMessages)。邮箱有可能有这么多消息吗?或者也许这些 ID 只是以某种方式重置?但这也不适合我的申请。

最佳答案

显然,由于 JavaMail 使用 Java int 来表示消息编号,如果消息超过 2^31-1,它就无法工作。对于任何真实邮箱来说,这似乎极不可能发生。如果你开始每秒收到一条新消息,那么你仍然需要 68 年才能达到这个数字。如果您的应用程序存在这种可能性,您应该管理邮箱,使其永远不会变得那么大,例如,通过删除邮件或将它们移动到存档邮箱(这需要使用 IMAP)。

(多线程与此无关;我不知道 Burak 在想什么。)

关于java - 如果收件箱中的邮件数量超过 int 范围会怎样?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43975745/

相关文章:

java - Sonarqube, "String contains no format specifiers"记录常量字符串消息时

java通过拷贝构造函数进行深拷贝

java - 如何获取显示标签中对应行的id

php - 用户限制 - 在数据库中还是直接到文件中? (灵活性与性能?)

php - Codeigniter 发送带有附件的电子邮件

java - GAE Java 项目错误 : javax. mail.Message 不受 Google App Engine 的 Java 运行时环境支持

java - 带有带有正确区域设置的 float 列的 JTable

php - 联系表单 PHP 重定向不起作用

Javamail ISO-8859-1 格式

android - 无法在 Android 中发送带附件的邮件