2010-06-08 4 views
6

J'ai utilisé un code open source de CodeProject pour lire des emails depuis un serveur de courrier entrant (POP Server). Le code peut être trouvé à l'emplacement suivant: http://www.codeproject.com/KB/IP/Pop3MimeClient.aspxLire email du serveur de courrier entrant (POP)

Jusqu'à présent, cela fonctionne très bien; Je peux lire des emails.

Mon objectif d'utiliser ce code était de récupérer les emails d'un serveur POP et de les traiter.

Mon problème est le suivant: Si j'utilise le serveur pop popmail "pop.gmail.com" de Gmail et que j'exécute l'application, je reçois uniquement les emails que je n'ai pas récupérés depuis la dernière fois que j'ai utilisé l'application. Mais si j'utilise le serveur POP de mon client chaque fois que je lance l'application, je reçois tous les emails dans le serveur pop.

Par exemple:
Si j'utilise le serveur POP Gmail: pop.gmail.com
J'ai trois e-mails sur le serveur pop. Je n'ai pas exécuté l'application. Je cours l'application pour la première fois. L'application lit l'email; cette fois, je recevrai les trois courriels. Je lance l'application une deuxième fois; mon application ne lira pas d'emails cette fois car j'ai déjà lu les 3 existants. C'est bien; C'est ce que je veux.

Maintenant, j'envoie un courriel à pop.gmail.com. Je réexécute l'application pour la troisième fois; cette fois, je ne recevrai que l'e-mail qui vient d'arriver, c'est le quatrième. C'est un bon comportement. C'est ce que je veux.

Mais si j'utilise mon serveur POP du client:
Peu importe combien de fois je lance l'application, il lit tous les e-mails dans la boîte aux lettres.

Cela va créer un problème pour moi, parce que je pense à la construction d'un service de fenêtre qui va lire les emails du serveur pop et les traiter. Ce service fonctionnera en continu. Je vais traiter les emails sur le serveur POP puis je dors pendant 1 minute et je traite à nouveau les emails. Si l'application téléchargée de CodeProject lit tous les emails tout le temps, la boîte aux lettres de mes clients peut avoir des milliers de courriels dans cette boîte mail, donc ce n'est pas faisable pour moi.

Y a-t-il des paramètres à effectuer sur le serveur POP de mon client qui permettront à mon application de récupérer uniquement les e-mails que je n'ai pas lus depuis la dernière fois que j'ai exécuté le service?

Répondre

3

Ne pas utiliser la mise en œuvre de Gmail POP ou IMAP comme canoniques; Ces deux protocoles se comportent différemment avec les comptes Gmail qu'avec pratiquement tous les autres serveurs.

Pour répondre à votre question, vous avez deux approches que vous pouvez prendre:

  1. garder une trace des ID de message de des messages que vous avez vu et les ignorer sur les connexions suivantes (cela laissera les messages sur le serveur pour un autre client à télécharger).
  2. Exécutez la commande DELE après avoir téléchargé un message, ce qui le supprimera du serveur.
+0

+1 très bonne réponse. – adatapost

Questions connexes