Question

J'ai écrit un beau programme en Java qui se connecte à un compte gmail et télécharge les pièces jointes qui lui sont envoyées. Une fois jointe, une pièce jointe est marquée comme lue et n'est plus téléchargée. Ce programme devra être exécuté dans plusieurs instances, chaque programme téléchargeant des pièces jointes uniques afin qu'une pièce jointe ne soit jamais téléchargée deux fois. Le problème est que, pour le moment, si la pièce jointe est d'une taille convenable, un programme la télécharge toujours, quand une autre instance se connecte et commence également à télécharger la pièce jointe avant qu'elle ne soit marquée comme lue.

J'ai essayé de vérifier et de définir divers indicateurs 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.

Était-ce utile?

La solution

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

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

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

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

Autres conseils

Utilisez plutôt le protocole IMAP - il est conçu pour l'interaction client-serveur.

De la RFC1939 (Protocole Post Office - Version 3):

  

POP3 n'est pas destiné à fournir   opérations de manipulation étendues de   courrier sur le serveur; normalement, le courrier est   téléchargé puis supprimé. Un protocole plus avancé (et complexe), IMAP4, est décrit dans la RFC1730 .

Je ne pense pas que POP3 est conçu pour un accès simultané multiple .

Demandez-vous ceci: 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. Utilisez une base de données commune ou un processus serveur pour coordonner les actions.

IMAP a-t-il plus d'options, mais je ne suis pas sûr que vous puissiez " verrouiller " un seul mail pour le marquer comme en cours de traitement.

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

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top