让多个Java pop3客户端与GMail一起使用

时间:2009-07-29 16:21:55

标签: java multithreading gmail javamail pop3

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

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

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

6 个答案:

答案 0 :(得分:4)

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

答案 1 :(得分:2)

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

  

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

答案 2 :(得分:2)

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

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

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

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

答案 3 :(得分:1)

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

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

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

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

答案 4 :(得分:0)

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

答案 5 :(得分:0)

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