53 votes

Intégrer la fonctionnalité de client POP3 dans une application C# ?

J'ai une application Web qui nécessite un composant basé sur le serveur pour accéder périodiquement aux boîtes aux lettres POP3 et récupérer les courriels. Le service doit ensuite traiter les courriels, ce qui implique.. :

  • Validation de l'e-mail par rapport à certaines règles commerciales (contient-il une référence valide dans l'objet, quel utilisateur a envoyé l'e-mail, etc.)
  • Analyse et sauvegarde des pièces jointes sur le disque
  • Prenez le corps de l'e-mail et les détails de la pièce jointe et créez un nouvel élément dans la base de données.
  • Ou mettez à jour un élément existant dont la référence correspond à l'objet de l'e-mail reçu.

Quelle est la meilleure façon d'aborder cette question ? Je ne veux vraiment pas avoir à écrire un client POP3 à partir de zéro, mais je dois pouvoir personnaliser le traitement des e-mails. L'idéal serait de pouvoir brancher un composant qui se charge de l'accès et de la récupération pour moi, renvoyant des tableaux de pièces jointes, de corps de texte, d'objet, etc. prêts pour mon traitement...

[ MISE À JOUR : Critiques ]

J'ai passé pas mal de temps à chercher des bibliothèques POP3 .NET (principalement gratuites) et j'ai donc pensé que je pourrais fournir une brève revue de certaines de celles mentionnées ci-dessous et de quelques autres :

  • Pop3.net - gratuit - fonctionne bien, mais est très basique en termes de fonctionnalités fournies. Il s'agit essentiellement des commandes POP3 et d'un encodage base64, mais c'est très simple - probablement une bonne introduction.
  • Assistant Pop3 - code commercial / code source ouvert - je n'ai pas réussi à le construire, il manque des DLL, je ne m'embêterais pas avec cela
  • C#Mail - gratuit pour un usage personnel - fonctionne bien, est livré avec un analyseur Mime et un client SMTP, mais les commentaires sont en japonais (ce qui n'est pas grave) et il ne fonctionne pas avec SSL "tout de suite" - j'ai dû modifier le constructeur SslStream, après quoi il a fonctionné sans problème.
  • OpenPOP - gratuit - n'a pas été mis à jour depuis environ 5 ans, son état actuel est donc .NET 1.0, ne prend pas en charge SSL mais ce n'était pas un problème à résoudre - j'ai simplement remplacé le flux existant par un SslStream et cela a fonctionné. Livré avec un analyseur Mime.

Parmi les bibliothèques gratuites, je choisirais C#Mail ou OpenPOP.

J'ai regardé quelques bibliothèques commerciales : Chillkat , Rebex , RemObjects , JMail.net . Sur la base des fonctionnalités, du prix et de l'impression de la société, j'opterais probablement pour Rebex et je le ferai peut-être à l'avenir si mes besoins changent ou si je rencontre des problèmes de production avec C#Mail ou OpenPOP.

Au cas où quelqu'un en aurait besoin, voici le constructeur SslStream de remplacement que j'ai utilisé pour activer SSL avec C#Mail et OpenPOP :

SslStream stream = new SslStream(clientSocket.GetStream(), false,
                 delegate(object sender, X509Certificate cert,
                 X509Chain chain, SslPolicyErrors errors) { return true; });

28voto

foens Points 2885

Je suis l'un des principaux développeurs de OpenPop.NET . Je suis tombé sur cette critique, et j'ai dû venir avec quelques commentaires concernant l'état actuel d'OpenPop.NET car la critique semble dépassée par le développement.

OpenPop.NET est de nouveau en développement actif. SSL a été introduit il y a six mois. Le projet a subi une refonte majeure et est maintenant beaucoup plus stable et facile à utiliser. Lorsque j'ai repris le projet, il comportait de nombreux bogues, et à l'heure actuelle, je n'en connais aucun. De nombreuses fonctionnalités supplémentaires ont été implémentées, principalement dans la partie analyseur MIME. Le projet est soutenu par des tests unitaires, et chaque fois qu'un bug est trouvé, un test unitaire est créé pour montrer ce bug avant de le corriger. Un site site web d'accompagnement avec des exemples existe maintenant. Il y a également eu d'autres mises à jour, mais je ne veux pas toutes les mentionner.

De plus, la licence d'OpenPop.NET a été modifiée et passe de LGPL a Domaine public (c'est-à-dire sans restrictions). Je pense que c'est une amélioration majeure pour les utilisateurs commerciaux.

7voto

Jason Kester Points 2111

J'ai fait une implémentation de OpenPop pour un projet récent, et j'en ai été satisfait. Il fait ce qu'il dit sur la boîte. (et il est gratuit).

6voto

Higty Points 292

Le constructeur de la classe SslStream a été modifié et mis en ligne. La version recommandée ne pose aucun problème d'utilisation.

2voto

Steven Murawski Points 6665

Courrier C# est disponible sur Codeplex et est assez facile à utiliser.

2voto

Pawel Lesnikowski Points 3634

Vous pouvez inclure Mail.dll Composant de messagerie .NET dans votre classement. Il prend en charge le protocole SSL, l'Unicode et les courriers électroniques multinationaux :

using(Pop3 pop3 = new Pop3())
{
    pop3.Connect("mail.host.com");      // Connect to server
    pop3.Login("user", "password");     // Login

    foreach(string uid in pop3.GetAll())
    {
        IMail email = new MailBuilder()
   .CreateFromEml(pop3.GetMessageByUID(uid));

        Console.WriteLine(email.Subject);
    }
    pop3.Close(true);  
}

Le protocole IMAP est également pris en charge.

Veuillez noter qu'il s'agit d'un commercial produit que j'ai créé.

Vous pouvez le télécharger ici : http://www.lesnikowski.com/mail

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