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.

4voto

Richard Beier Points 1024

Je ne recommanderais pas OpenPOP. Je viens de passer quelques heures à déboguer un problème - la méthode GetMessage() de POPClient d'OpenPOP renvoyait mystérieusement null. J'ai débogué cela et j'ai trouvé un bug d'index de chaîne - voir le correctif que j'ai soumis ici : http://sourceforge.net/tracker/?func=detail&aid=2833334&group_id=92166&atid=599778. Il était difficile de trouver la cause car il y a des blocs catch{} vides qui avalent les exceptions.

De plus, le projet est principalement en sommeil... la dernière version remonte à 2004.

Pour l'instant, nous utilisons toujours OpenPOP, mais je vais jeter un œil à certains des autres projets recommandés ici.

4voto

Higty Points 292

HigLabo.Mail est facile à utiliser. Voici un exemple d'utilisation:

using (Pop3Client cl = new Pop3Client()) 
{ 
    cl.UserName = "MonNomUtilisateur"; 
    cl.Password = "MonMotDePasse"; 
    cl.ServerName = "MonServeur"; 
    cl.AuthenticateMode = Pop3AuthenticateMode.Pop; 
    cl.Ssl = false; 
    cl.Authenticate(); 
    ///Obtenir le premier e-mail de ma boîte aux lettres 
    Pop3Message mg = cl.GetMessage(1); 
    String MyText = mg.BodyText; 
    ///Si le message a une pièce jointe 
    Pop3Content ct = mg.Contents[0];         
    ///vous pouvez l'enregistrer sur votre disque local 
    ct.DecodeData("chemin de votre fichier"); 
} 

vous pouvez l'obtenir à partir de https://github.com/higty/higlabo ou Nuget [HigLabo]

2voto

J'ai juste essayé SMTPop et ça a fonctionné.

  1. J'ai téléchargé ceci.
  2. Ajouté la référence smtpop.dll à mon projet C# .NET

J'ai écrit le code suivant :

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;    
using SmtPop;

namespace SMT_POP3 {

    class Program {
        static void Main(string[] args) {
            SmtPop.POP3Client pop = new SmtPop.POP3Client();
            pop.Open("", 110, "", "");

            // Obtenir la liste des messages du serveur POP
            SmtPop.POPMessageId[] messages = pop.GetMailList();
            if (messages != null) {

                // Parcourir la liste des pièces jointes
                foreach(SmtPop.POPMessageId id in messages) {
                    SmtPop.POPReader reader= pop.GetMailReader(id);
                    SmtPop.MimeMessage msg = new SmtPop.MimeMessage();

                    // Lire le message
                    msg.Read(reader);
                    if (msg.AddressFrom != null) {
                        String from= msg.AddressFrom[0].Name;
                        Console.WriteLine("de: " + from);
                    }
                    if (msg.Subject != null) {
                        String subject = msg.Subject;
                        Console.WriteLine("sujet: "+ subject);
                    }
                    if (msg.Body != null) {
                        String body = msg.Body;
                        Console.WriteLine("corps: " + body);
                    }
                    if (msg.Attachments != null && false) {
                        // Faire quelque chose avec la première pièces jointe
                        SmtPop.MimeAttachment attach = msg.Attachments[0];

                        if (attach.Filename == "data") {
                           // Lire les données de la pièce jointe
                           Byte[] b = Convert.FromBase64String(attach.Body);
                           System.IO.MemoryStream mem = new System.IO.MemoryStream(b, false);

                           //BinaryFormatter f = new BinaryFormatter();
                           // DataClass data= (DataClass)f.Deserialize(mem); 
                           mem.Close();
                        }                     

                        // Supprimer le message
                        // pop.Dele(id.Id);
                    }
               }
           }    
           pop.Quit();
        }
    }
}

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