2009-07-29 3 views
0

Ich habe ein nettes Programm in Java geschrieben, das sich mit einem Google Mail-Konto verbindet und heruntergeladene Anhänge herunterlädt. Sobald ein Anhang heruntergeladen wurde, wird er als gelesen markiert und nicht mehr heruntergeladen. Dieses Programm muss in mehreren Instanzen laufen, wobei jedes Programm einzigartige Anhänge herunterlädt, so dass ein einzelner Anhang niemals zweimal heruntergeladen wird. Das Problem ist, dass im Moment, wenn der Anhang eine anständige Größe hat, ein Programm es immer noch herunterlädt, wenn eine andere Instanz eine Verbindung herstellt und auch beginnt, den Anhang herunterzuladen, bevor er als gelesen markiert wurde.Mehrere Java-pop3-Clients zum Arbeiten mit GMail verwenden

Ich habe versucht, verschiedene Flags zu prüfen und einzustellen und zu überprüfen, ob der Ordner geöffnet ist, nichts scheint zu funktionieren. Irgendwelche Lösungen?

Update: Vielen Dank für die schnellen Antworten, leider ist IMAP aus anderen Gründen keine Option.

Antwort

1

Wie die anderen bereits erwähnt haben, ist POP3 nicht wirklich für diese Art von Szenario gedacht.

Wenn Sie unbedingt POP3 verwenden müssen, würde ich vorschlagen, alle E-Mails auf einen Zwischenserver herunterzuladen, der die Nachrichten sortiert und sie für jeden der anderen Clients verfügbar macht.

Es klingt, als ob Sie nur versuchen, die Verarbeitung der E-Mails zu verteilen. Wenn dies der Fall ist, können Sie einfach jeden Client mit Ihrem Zwischenserver verbinden, um die nächste verfügbare Nachricht abzurufen.

Ich bin mir nicht sicher, was Ihre Einschränkungen sind, aber Sie können sogar in Erwägung ziehen, die Anhänge auf andere Weise als per E-Mail zu empfangen. Wenn Personen Dateien hochladen, können Sie ein Webformular einrichten, das automatisch jede Datei zur Verarbeitung an die nächste verfügbare Instanz Ihrer Anwendung sendet.

+0

Vielen Dank, ich könnte versuchen, mit Mail ganz loszuwerden, obwohl das Herunterladen auf einen anderen Server definitiv ein Overkill wäre. –

4

Verwenden Sie stattdessen IMAP - es wurde für die Client-Server-Interaktion entwickelt.

+0

Ja, das ist die Antwort genau, IMHO. Google unterstützt es. – djangofan

2

Von RFC1939 (Post Office Protocol - Version 3):

POP3 nicht umfangreiche Manipulationen von Mail auf dem Server zur Verfügung zu stellen beabsichtigt; normalerweise wird die Mail heruntergeladen und dann gelöscht. Ein fortgeschritteneres (und komplexeres) Protokoll, IMAP4, wird in RFC1730 diskutiert.

2

Ich glaube nicht, POP3 ist für mehrere gleichzeitige Zugriff gemacht.

Fragen Sie sich: Benötige ich wirklich mehrere Prozesse, die auf dieselbe Mailbox zugreifen?

Wenn Sie dies tun, müssen Sie einen Weg finden, diese Prozesse miteinander kommunizieren zu lassen. Verwenden Sie einen gemeinsamen Datenbank- oder Serverprozess zum Koordinieren von Aktionen.

IMAP hat mehr Optionen, aber ich bin mir nicht sicher, ob Sie eine einzelne Mail "sperren" können, um sie als verarbeitet zu markieren.

+0

Er könnte Flags auf der E-Mail mit IMAP setzen, obwohl ich zustimme, dass dies auch kein 100% zuverlässiger Ansatz ist. – jsight

+0

Setzt IMAP die Flags sofort oder am Ende der Transaktion? – Stroboskop

+0

Am wahrscheinlichsten feuert er gerade ab, Klienten durch cron oder ähnliches herunterladend, ohne dass sie voneinander wissen. –

0

Wenn Sie bei einer POP3-Verbindung bleiben müssen, können Sie eine lokale Datenbank mit zuvor heruntergeladenen Nachrichten-IDs behalten. Neue Instanzen könnten dies vor dem erneuten Herunterladen überprüfen. Die beste Lösung besteht jedoch darin, nur IMAP zu verwenden, da IMAP vor dem Herunterladen die Lese-/Lese-Flags festlegen kann.

0

Sie können die E-Mail als gelesen markieren, bevor Sie den Download starten, und dann mit dem Download beginnen.

+1

pop unterstützt das nicht –

+0

Ah, ich hatte diesen Teil vergessen. – aperkins