Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
让多个JavaPOP3客户端使用GMail_Java_Multithreading_Gmail_Jakarta Mail_Pop3 - Fatal编程技术网

让多个JavaPOP3客户端使用GMail

让多个JavaPOP3客户端使用GMail,java,multithreading,gmail,jakarta-mail,pop3,Java,Multithreading,Gmail,Jakarta Mail,Pop3,我用Java编写了一个很好的程序,可以连接到gmail帐户并下载发送给它的atachments。下载附件后,它将被标记为已读,不再下载。该程序必须在多个实例中运行,每个程序下载唯一的附件,这样一个附件就不会下载两次。问题在于,如果附件的大小合适,那么当另一个实例连接并开始下载附件时,一个程序仍在下载该附件,而该附件尚未标记为已读 我尝试过检查和设置各种标志,检查文件夹是否打开,但似乎没有任何效果。有什么解决办法吗 更新:感谢您的快速回答,遗憾的是,由于其他原因,IMAP不是一个选项。考虑改用IM

我用Java编写了一个很好的程序,可以连接到gmail帐户并下载发送给它的atachments。下载附件后,它将被标记为已读,不再下载。该程序必须在多个实例中运行,每个程序下载唯一的附件,这样一个附件就不会下载两次。问题在于,如果附件的大小合适,那么当另一个实例连接并开始下载附件时,一个程序仍在下载该附件,而该附件尚未标记为已读

我尝试过检查和设置各种标志,检查文件夹是否打开,但似乎没有任何效果。有什么解决办法吗


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

考虑改用IMAP-它是为客户机-服务器交互而设计的。

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

POP3不打算提供 广泛操纵 服务器上的邮件;通常情况下,邮件是 下载然后删除。中讨论了更高级(更复杂)的协议IMAP4


我不认为POP3是为多个同时访问而设计的

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

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


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

如果需要保持POP3连接,可以保留以前下载的邮件ID的本地数据库。然后,新实例可以在再次下载之前对此进行检查。不过,最好的解决方案是使用IMAP,因为IMAP能够在下载之前设置读/未读标志。

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

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

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


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

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

他可以使用IMAP在电子邮件上设置标志,虽然我也同意这不是一个100%可靠的方法。IMAP是立即设置标志还是在事务结束时设置标志?他很可能只是通过cron或类似方式在客户不知道对方的情况下下载客户。谢谢,我可能会考虑完全不用邮件,虽然下载到另一台服务器肯定是一种过火的行为。啊,我已经忘记了那部分。是的,这正是答案,伊姆霍。谷歌对此表示支持。