Domanda

Ho scritto un bel programma in Java che si collega a un account Gmail e scarica gli allegati inviati ad esso. Una volta scaricato, l'allegato viene contrassegnato come letto e non viene più scaricato. Questo programma dovrà essere eseguito in più istanze con ogni programma che scarica allegati unici in modo che un singolo allegato non venga mai scaricato due volte. Il problema è che al momento se l'allegato ha dimensioni decenti, un programma lo sta ancora scaricando, quando un'altra istanza si collega e inizia anche a scaricare l'allegato prima che sia stato contrassegnato come letto.

Ho provato a controllare e impostare vari flag e verificare se la cartella è aperta, nulla sembra funzionare. Qualche soluzione?

Aggiornamento: grazie per le risposte rapide, purtroppo IMAP non è un'opzione per altri motivi.

È stato utile?

Soluzione

Come hanno già detto gli altri, POP3 non è proprio destinato a questo tipo di scenario.

Se devi assolutamente usare POP3, ti suggerirei di scaricare tutta l'e-mail su un server intermedio che ordina i messaggi e li rende disponibili per ciascuno degli altri client.

Sembra che tu stia solo cercando di distribuire l'elaborazione delle e-mail. In tal caso, puoi semplicemente collegare ciascun client al tuo server intermedio per recuperare il prossimo messaggio disponibile.

Non sono sicuro di quali siano i tuoi vincoli, ma potresti anche voler prendere in considerazione la possibilità di ricevere gli allegati in un altro modo oltre alla posta elettronica. Se le persone caricano file, è possibile impostare un modulo Web che invia automaticamente ogni file alla successiva istanza disponibile dell'applicazione per l'elaborazione.

Altri suggerimenti

Valuta invece di utilizzare IMAP: è progettato per l'interazione client-server.

Da RFC1939 (Post Office Protocol - Version 3):

  

POP3 non è destinato a fornire   estese operazioni di manipolazione di   posta sul server; normalmente, la posta lo è   scaricato e quindi eliminato. Un protocollo più avanzato (e complesso), IMAP4, è discusso in RFC1730 .

Non credo che POP3 sia fatto per accesso simultaneo multiplo .

Chiediti questo: ho davvero bisogno di più processi per accedere alla stessa casella di posta?

In tal caso, dovrai trovare un modo per comunicare tra loro questi processi. Utilizzare un processo di database o server comune per coordinare le azioni.

IMAP ha ha più opzioni, ma non sono sicuro di poter " bloccare " un singolo messaggio per contrassegnarlo come in elaborazione.

Se è necessario rimanere con una connessione POP3, è possibile conservare un database locale di ID messaggio precedentemente scaricati. Quindi le nuove istanze potrebbero confrontarsi con quelle prima di scaricare di nuovo. La soluzione migliore è usare solo IMAP, poiché IMAP è in grado di impostare i flag letti / non letti prima del download.

È possibile contrassegnare la posta come letta prima di iniziare il download, quindi iniziare a scaricarla.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top