我已经用Java编写了一个很好的程序,它连接到一个gmail帐户并下载发送给它的atachments。下载附件后,它将被标记为已读,并且不会再次下载。该程序必须在多个实例中运行,每个程序下载唯一的附件,以便永远不会下载两个单个附件。问题是,如果附件大小合适,当另一个实例连接时,一个程序仍在下载它,并且在将附件标记为已读之前也开始下载附件。
我已经尝试检查并设置各种标志并检查文件夹是否打开,似乎没有任何效果。任何解决方案?
更新:感谢您的快速解答,遗憾的是,由于其他原因,IMAP不是一种选择。
答案 0 :(得分:4)
考虑使用IMAP - 它专为客户端 - 服务器交互而设计。
答案 1 :(得分:2)
答案 2 :(得分:2)
我不认为POP3是为多个同时访问而制作的。
问问自己:我真的需要多个进程访问同一个邮箱吗?
如果这样做,您将必须找到让这些进程相互通信的方法。 使用通用数据库或服务器进程来协调操作。
IMAP 有更多选项,但我不确定您是否可以“锁定”一封邮件以将其标记为正在处理。
答案 3 :(得分:1)
正如其他人所提到的,POP3并不是真正适用于这种情况。
如果您绝对必须使用POP3,我建议将所有电子邮件下载到中间服务器,该服务器对邮件进行排序并使其可用于其他每个客户端。
听起来你只是想分发电子邮件的处理。如果是这种情况,您可以让每个客户端连接到您的中间服务器以检索下一个可用消息。
我不确定你的约束是什么,但你甚至可能想考虑除了电子邮件以外的其他方式接收附件。如果人们正在上传文件,您可以设置一个Web表单,自动将每个文件发送到您应用程序的下一个可用实例进行处理。
答案 4 :(得分:0)
如果您需要使用POP3连接,则可以保留以前下载的消息ID的本地数据库。然后新的实例可以在再次下载之前检查它。最好的解决方案就是使用IMAP,因为IMAP能够在下载之前设置读/未读标志。
答案 5 :(得分:0)
您可以在开始下载之前将邮件标记为已读,然后开始下载。