我已经用Java编写了一个很好的程序,它连接到一个gmail帐户并下载发送给它的atachments。下载附件后,它将被标记为已读,并且不会再次下载。该程序必须在多个实例中运行,每个程序下载唯一的附件,以便永远不会下载两个单个附件。问题是,如果附件大小合适,当另一个实例连接时,一个程序仍在下载它,并且在将附件标记为已读之前也开始下载附件。

我已经尝试检查并设置各种标志并检查文件夹是否打开,似乎没有任何效果。任何解决方案?

更新:感谢您的快速解答,遗憾的是,由于其他原因,IMAP不是一种选择。

有帮助吗?

解决方案

正如其他人所提到的,POP3并不是真正适用于这种情况。

如果您绝对必须使用POP3,我建议将所有电子邮件下载到中间服务器,该服务器对邮件进行排序并使其可用于其他每个客户端。

听起来你只是想分发电子邮件的处理。如果是这种情况,您可以让每个客户端连接到您的中间服务器以检索下一个可用消息。

我不确定你的约束是什么,但你甚至可能想要考虑除了电子邮件以外的其他方式接收附件。如果人们正在上传文件,您可以设置一个Web表单,自动将每个文件发送到您应用程序的下一个可用实例进行处理。

其他提示

考虑使用IMAP - 它专为客户端 - 服务器交互而设计。

来自 RFC1939 (邮局协议 - 第3版):

  

POP3无意提供   广泛的操纵操作   邮件在服务器上;通常,邮件是   下载然后删除。更高级(和复杂)的协议IMAP4将在 RFC1730 中讨论。

我不认为POP3是为多个同时访问而制作的。

问问自己:我真的需要多个进程访问同一个邮箱吗?

如果这样做,您将必须找到让这些进程相互通信的方法。 使用通用数据库或服务器进程来协调操作。

IMAP 有更多选项,但我不确定你是否可以“锁定”一封邮件将其标记为正在处理。

如果您需要使用POP3连接,则可以保留以前下载的消息ID的本地数据库。然后新的实例可以在再次下载之前检查它。最好的解决方案就是使用IMAP,因为IMAP能够在下载之前设置读/未读标志。

您可以在开始下载之前将邮件标记为已读,然后开始下载。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top