2009-07-29 5 views
0

J'ai écrit un joli programme en Java qui se connecte à un compte Gmail et télécharge des atachments qui lui sont envoyés. Une fois qu'une pièce jointe a été téléchargée, elle est marquée comme lue et n'est plus téléchargée. Ce programme devra s'exécuter dans plusieurs instances, chaque programme téléchargeant des pièces jointes uniques afin qu'une seule pièce jointe ne soit jamais téléchargée deux fois. Le problème est que, pour le moment, si la taille de la pièce jointe est correcte, un programme la télécharge toujours, lorsqu'une autre instance se connecte et commence également à télécharger la pièce jointe avant qu'elle ne soit marquée comme lue.Obtenir plusieurs clients Java pop3 pour travailler avec GMail

J'ai essayé de vérifier et de régler divers drapeaux et de vérifier si le dossier est ouvert, rien ne semble fonctionner. Des solutions?

Mise à jour: Merci pour les réponses rapides, malheureusement, IMAP n'est pas une option pour d'autres raisons.

Répondre

1

Comme d'autres l'ont mentionné, POP3 n'est pas vraiment destiné à ce genre de scénario.

Si vous devez absolument utiliser POP3, je vous suggère de télécharger tous les messages électroniques vers un serveur intermédiaire qui trie les messages et les rend disponibles pour chacun des autres clients.

Il semble que vous essayez simplement de distribuer le traitement des e-mails. Si tel est le cas, vous pouvez simplement demander à chaque client de se connecter à votre serveur intermédiaire pour récupérer le prochain message disponible.

Je ne sais pas quelles sont vos contraintes, mais vous pouvez même envisager de recevoir les pièces jointes autrement que par courrier électronique. Si des utilisateurs téléchargent des fichiers, vous pouvez configurer un formulaire Web qui envoie automatiquement chaque fichier à l'instance disponible suivante de votre application pour traitement.

+0

Merci, je pourrais envisager de se débarrasser de l'utilisation du courrier tout à fait, même si le téléchargement vers un autre serveur serait certainement une exagération. –

4

Pensez à utiliser IMAP à la place - il est conçu pour une interaction client-serveur.

+0

Oui, c'est la réponse exactement, à mon humble avis. Google le soutient. – djangofan

2

De RFC1939 (Post Office Protocol - Version 3):

POP3 ne vise pas à fournir opérations de manipulation de vastes courrier sur le serveur; normalement, le courrier est téléchargé, puis supprimé. Un protocole plus avancé (et complexe), IMAP4, est discuté dans RFC1730.

2

Je ne pense pas que POP3 est faite pour accès simultané multiple.

Posez-vous cette question: ai-je vraiment besoin de plusieurs processus accédant à la même boîte aux lettres? Si vous le faites, vous devrez trouver un moyen de faire communiquer ces processus les uns avec les autres. Utilisez une base de données commune ou un processus serveur pour coordonner les actions.

IMAP est-ce que a plus d'options, mais je ne suis pas sûr si vous pouvez "verrouiller" un seul courrier pour le marquer comme étant en cours de traitement.

+0

Il pourrait mettre des drapeaux sur l'email avec IMAP, bien que je sois d'accord que ce n'est pas une approche 100% fiable non plus. – jsight

+0

Est-ce que IMAP définit les drapeaux immédiatement ou à la fin de la transaction? – Stroboskop

+0

Il est très probable qu'il se contente de télécharger des clients via cron ou similaire sans qu'ils se connaissent. –

0

Si vous devez rester avec une connexion POP3, vous pouvez conserver une base de données locale contenant les identifiants de messages précédemment téléchargés. Ensuite, de nouvelles instances pourraient vérifier cela avant de télécharger à nouveau. La meilleure solution est simplement d'utiliser IMAP, car IMAP est capable de définir les indicateurs lus/non lus avant le téléchargement.

0

Vous pouvez marquer le courrier comme lu avant de commencer le téléchargement, puis commencer à le télécharger.

+1

pop ne supporte pas cela –

+0

Ah, j'avais oublié cette partie. – aperkins

Questions connexes