75 votes

Lecture de l'e-mail à l'aide de Pop3 en C#

Je cherche une méthode pour lire des e-mails en utilisant Pop3 en C# 2.0. Actuellement, j'utilise du code trouvé dans CodeProject. Cependant, cette solution est moins qu'idéale. Le plus gros problème est qu'elle ne prend pas en charge les e-mails écrits en unicode.

74voto

VanOrman Points 2149

J'ai utilisé avec succès OpenPop.NET pour accéder aux emails via POP3.

16voto

Martin Vobr Points 3443

Télécharger l'e-mail via le protocole POP3 est la partie facile de la tâche. Le protocole est assez simple et la seule partie difficile pourrait être les méthodes d'authentification avancées si vous ne voulez pas envoyer un mot de passe en texte clair sur le réseau (et ne pouvez pas utiliser le canal de communication chiffré SSL). Voir RFC 1939: Protocol du bureau de poste - Version 3 et RFC 1734: commande d'authentification POP3 pour plus de détails.

La partie difficile arrive lorsque vous devez analyser l'e-mail reçu, ce qui signifie le plus souvent analyser le format MIME. Vous pouvez écrire un analyseur MIME rapide et basique en quelques heures ou jours et il gérera 95+% de tous les messages entrants. Améliorer l'analyseur pour qu'il puisse analyser presque tous les e-mails signifie :

  • obtenir des échantillons d'e-mails envoyés par les clients de messagerie les plus populaires et améliorer l'analyseur afin de corriger les erreurs et les mauvaises interprétations des RFC générées par eux.
  • S'assurer que les messages violant les RFC pour les en-têtes et le contenu ne feront pas planter votre analyseur et que vous pourrez lire chaque valeur lisible ou devinable de l'e-mail corrompu.
  • Gestion correcte des problèmes d'internationalisation (par exemple, les langues écrites de droite à gauche, le codage correct pour une langue spécifique, etc.)
  • UNICODE
  • Pièces jointes et arbre hiérarchique des éléments de message comme on le voit dans "Exemple d'e-mail de torture MIME"
  • S/MIME (e-mails signés et chiffrés).
  • et ainsi de suite

Déboguer un analyseur MIME robuste prend des mois de travail. Je sais, car j'ai regardé mon ami en écrire un pour le composant mentionné ci-dessous et j'écrivais aussi quelques tests unitaires pour cela ;-)

Revenons à la question originale.

Utiliser le code issu de notre page de tutoriel POP3 et des liens vous aiderait :

// 
// créer un client, se connecter et se connecter 
Pop3 client = new Pop3();
client.Connect("pop3.example.org");
client.Login("nom d'utilisateur", "mot de passe");

// obtenir la liste des messages 
Pop3MessageCollection liste = client.GetMessageList();

if (liste.Count == 0)
{
    Console.WriteLine("Il n'y a pas de message dans la boîte aux lettres.");
}
else 
{
    // télécharger le premier message
    MailMessage message = client.GetMailMessage(liste[0].NuméroDeSéquence);
    ...
}

client.Disconnect();

8voto

Corey Trager Points 11334

Mon application open source BugTracker.NET inclut un client POP3 qui peut analyser le MIME. Le code POP3 et le code MIME proviennent d'autres auteurs, mais vous pouvez voir comment cela s'assemble dans mon application.

Pour l'analyse MIME, j'utilise http://anmar.eu.org/projects/sharpmimetools/.

Consultez les fichiers POP3Main.cs, POP3Client.cs et insert_bug.aspx

5voto

Pawel Lesnikowski Points 3634

Vous pouvez également essayer le composant de messagerie Mail.dll, il prend en charge SSL, Unicode et le support des e-mails multinationaux :

using(Pop3 pop3 = new Pop3())
{
    pop3.Connect("mail.host.com");           // Se connecter au serveur et se connecter
    pop3.Login("utilisateur", "mot de passe");

    foreach(string uid in pop3.GetAll())
    {
        IMail email = new MailBuilder()
            .CreateFromEml(pop3.GetMessageByUID(uid));
          Console.WriteLine( email.Subject );
    }
    pop3.Close(false);      
}

Vous pouvez le télécharger ici https://www.limilabs.com/mail

Veuillez noter que c'est un produit commercial que j'ai créé.

4voto

stephenbayer Points 5548

Appelez-moi vieux jeu mais pourquoi utiliser une bibliothèque tierce pour un protocole simple. J'ai implémenté des lecteurs POP3 dans une application web ASP.NET basée sur System.Net.Sockets.TCPClient et System.Net.Security.SslStream pour le chiffrement et l'authentification. En ce qui concerne les protocoles, une fois que vous ouvrez la communication avec le serveur POP3, il n'y a qu'une poignée de commandes avec lesquelles vous devez traiter. C'est un protocole très facile à travailler.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X