IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windows Forms Discussion :

rapatriment d'emails de exchange via POP3 en C#


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut rapatriment d'emails de exchange via POP3 en C#
    Bonjour,


    (j'avais posté déjà un sujet dans le sous forum script)
    Mais vu que j'ai trouvé quelque chose et qu'il y a un "bug" ...

    Quelqu'un connait la librairie Jscape.Email?


    j'ai utilisé ceci pour parvenir à lister les mails contenu dans le serveur exchange...
    mais il me dit:
    Exception non gérée*: Jscape.Email.PopException: An I/O Error occured: System.Ne
    t.Sockets.SocketException: Le nom demandé est valide et a été trouvé dans la bas
    e de données, mais il ne dispose pas des données associées recherchées
    à System.Net.Dns.InternalGetHostByName(String hostName, Boolean includeIPv6)
    à System.Net.Dns.Resolve(String hostName)
    à Jscape.Email.Pop.Connect()
    à Jscape.Email.Pop.Connect()
    à PopExample.PopExample..ctor(String hostname, String username, String passwo
    rd)
    voici le code trouvé:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
     
    using System;
    using System.Collections;
    using System.IO;
    using System.Text;
    using System.Threading;
    using Jscape.Email;
     
    namespace PopExample
    {
     
        class PopExample
        {
     
            public Pop myPop = null;
            // set default attachment folder
            public string attDir = "./messages/attachments/";
     
            public PopExample(string hostname, string username, string password)
            {
                myPop = new Pop(hostname, username, password);
                myPop.LicenseKey = "Email Factory for .NET:Evaluation:Evaluation:01-08-2009:P45IuAOh4AT0k4y93Q7Hjt895yhSB2/667NrPJ2STFam7BTp5UkH97UsMtGe8ZJaSTiD7o+t8PfGjJrsifNMdNViR7rn/gqjqkBl1XqK1a/x0+7eI2Q6sNU7U6Z6hoEOuzBQ4JZo2BJ/aOBfKUfZO+Q0RXMMcJtAOETEKVeLnKI=";
                // turn on debug mode
                myPop.Debug = true;
                // don't delete messages from server
                myPop.DeleteMessages = false;
     
                // Subscribe to events
                myPop.ConnectedEvent += new Pop.ConnectedEventHandler(OnConnected);
                myPop.DisconnectedEvent += new Pop.DisconnectedEventHandler(OnDisconnected);
                myPop.DataReceivedEvent += new Pop.DataReceivedEventHandler(OnDataReceived);
                myPop.CommandSentEvent += new Pop.CommandSentEventHandler(OnCommandSent);
                myPop.MessageRetrievedEvent += new Pop.MessageRetrievedEventHandler(OnMessageRetrieved);
     
                // test current dir structure
                if (!Directory.Exists(attDir))
                {
                    Directory.CreateDirectory(attDir);
                }
     
                // connect to pop server
                myPop.Connect();
                int mc = 0;
                // retrieve all email messages
                IEnumerator e = myPop.GetMessages();
                while (e.MoveNext())
                {
                    ++mc;
                    int ac = 0;
                    EmailMessage message = (EmailMessage)e.Current;
                    // get attachments for each email, if any
                    IEnumerator ea = message.GetAttachments();
                    while (ea.MoveNext())
                    {
                        ++ac;
                        Attachment a = (Attachment)ea.Current;
                        // get name of attached file, if any
                        String filename = a.GetFilename();
                        if (filename.Length == 0)
                        {
                            // build temporary filename
                            filename = "att" + mc + "_" + ac + ".txt";
                        }
                        // get data for attached file
                        byte[] data = a.GetFileData();
                        // save the attachment
                        FileStream fs = new FileStream(attDir + filename, FileMode.Create, FileAccess.Write);
                        BinaryWriter w = new BinaryWriter(fs);
                        w.Write(data, 0, data.Length);
                        fs.Close();
                    }
                }
     
                // your server may require a slight delay in order to respond.
                Thread.Sleep(100);
                // disconnect from server
                myPop.Disconnect();
            }
     
            [STAThread]
            static void Main(string[] args)
            {
                string hostname = "IP/exchange";
                string username = "login";
                string password = "pwd";
     
                PopExample popexample = new PopExample(hostname, username, password);
            }
     
            public void OnConnected(object sender, PopConnectedEventArgs e)
            {
                Console.WriteLine("Connected to {0}", e.Host);
            }
            public void OnDisconnected(object sender, PopDisconnectedEventArgs e)
            {
                if (myPop.IsConnected())
                {
                    myPop.Disconnect();
                }
                Console.WriteLine("Disconnected.");
            }
            public void OnDataReceived(object sender, PopDataReceivedEventArgs e)
            {
                Console.WriteLine("Response: " + e.Response);
            }
            public void OnCommandSent(object sender, PopCommandSentEventArgs e)
            {
                Console.WriteLine("Command: " + e.Command);
            }
            public void OnMessageRetrieved(object sender, PopMessageRetrievedEventArgs e)
            {
                Console.WriteLine("Message subject= " + e.Message.Subject);
            }
     
        }
    }

    Pourquoi ne connait-il pas POP3?
    POP3 est un protocole pour rapatrier les mails du serveur il me semble...
    J'ai essayé avec IMAP mais il lance les même exceptions :s


    Merci d'avance pour l'aide apportée

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut objet LDAP
    Il faudrait utiliser LDAP pour récupérer des mails, contacts à ce qu'on me dit...


    J'ai été voir sur le site msdn, google... mais je trouve rien comme exemple à propos de cela...


    je suppose que qqun a déjà fait cela?
    Si oui avez-vous un lien à me proposer?

  3. #3
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    pourquoi utiliser Jscape?? les librairies c'est bien mais que quand ca apporte un plus et bien souvent, on ne controle pas ce qu'ils bidouillent à l'intérieur.
    tu devrais trouver ta réponse ici
    http://kbalertz.com/sresults.aspx?sw...&st=1&stec=213

    n'hésite pas à la ramener ici quand tu l'auras trouvé

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut
    voilà je reviens faire un tour :p

    j'ai trouvé comment faire via ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    XmlConfig xmlConfig= new XmlConfig();
    List<string> lstValues = new List<string>();
     
    MSXML2.XMLHTTP30 oXMLHttp = new MSXML2.XMLHTTP30();
     
    const bool bListItems = false;
    String sUrl;
     
    //TODO: Replace ExchServer with your Exchange server and UserAlias with your user alias.
     sUrl = "http://ip/exchange/UserName/";
     
     
    oXMLHttp.open("SEARCH", sUrl, false, "domainName\\userName", "Pwd");
     
    //TODO: Use this query to list items.
    String sQuery;
    sQuery = "<?xml version='1.0'?>" + 
    "<g:searchrequest xmlns:g='DAV:'>" +
    "<g:sql>SELECT \"DAV:displayname\" " +
     "FROM SCOPE('SHALLOW TRAVERSAL OF \"" + sUrl + "\"')" +
    " WHERE \"DAV:isfolder\" = " + bListItems.ToString()+
     "</g:sql>" +
     "</g:searchrequest>";
     
    oXMLHttp.setRequestHeader("Content-Type", "text/xml");
    oXMLHttp.setRequestHeader("Translate", "f");
    oXMLHttp.setRequestHeader("Content-Length", "" + sQuery.Length);
     
    Console.WriteLine(sQuery);
    oXMLHttp.send(sQuery);
    Console.WriteLine(oXMLHttp.status);
    Console.WriteLine(oXMLHttp.statusText);
     
     string essai = oXMLHttp.responseText;
    Console.WriteLine(essai);
     
    StreamWriter writer = File.CreateText("essai_outlook.xml");
    writer.WriteLine(essai);               
    writer.Close();
     
    XmlConfig.readFile("essai_outlook.xml");
    lstValues = XmlConfig.getValues("a:displayname");
    ce script enregistre dans un fichier xml les entêtes des mails contenus sur le serveur exchange.

    J'ai un problème lorsque je lis le fichier xml...
    il me met pour lstValues = XmlConfig.getValues("a:displayname"); :
    la référence d'objet n'est pas définie à une instance d'un objet
    Quand j'instancie la classe XmlConfig via new et que je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    XmlConfig xmlConfig= new XmlConfig();
     lstValues = xmlConfig.getValues("a:displayname");
    il me met:
    Member 'Samples.XmlConfig.readFile(string)' cannot be accessed with an instance reference; qualify it with a type name instead

    Quelqu'un a-t-il une solution pour lister ce qui se trouve dans la balise <a:displayname> ?

    (c'est peut-être bête mais je maitrise pas encore assez le C#...)

  5. #5
    Rédacteur
    Avatar de Louis-Guillaume Morand
    Homme Profil pro
    Cloud Architect
    Inscrit en
    Mars 2003
    Messages
    10 839
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Cloud Architect
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2003
    Messages : 10 839
    Par défaut
    ca vient d'où ta classe XmlConfig???

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    35
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2008
    Messages : 35
    Par défaut
    une classe que j'utilise avec DataSet.ReadXml

    il y a 2 fonctions, une qui lit le fichier XML et l'autre qui recherche dedans

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
     
    class XmlConfig
       {       
            private static DataSet cfgTable;
     
            public static void readFile(string configPath)
            {
                cfgTable = new DataSet();
     
                try
                {
                    cfgTable.ReadXml(configPath);
                    Console.WriteLine("test ok fichier trouvé");
                }
                catch (FileNotFoundException fnf)
                {
                    throw new ErrorReadingFile("fichier non trouvé");
                }
                catch (Exception ex)
                {
                    throw new ErrorReadingFile("Erreur d'ouverture");
                }
     
            }
     
     public static List<string> getValues(string elements)
            {
                Console.WriteLine(elements);
                try
                {
                    List<string> lstValues = new List<string>();
     
                    foreach (DataRow dr in cfgTable.Tables[elements].Rows)
                        lstValues.Add(dr[1].ToString());
     
                    return lstValues;
                }
                catch (Exception ex)
                {
                    throw new ElementNotFound("Elements non trouvé : " + ex.Message);
                }
            }
    }

Discussions similaires

  1. Se connecter à EXCHANGE via POP3
    Par DomiM dans le forum Exchange Server
    Réponses: 0
    Dernier message: 13/11/2009, 20h40
  2. Envoi d'email en auto via Outlook : confirmation
    Par philou22 dans le forum VBA Access
    Réponses: 3
    Dernier message: 06/02/2008, 09h42
  3. Email d'access via lotus
    Par chalou dans le forum Access
    Réponses: 6
    Dernier message: 02/12/2006, 16h34
  4. [VB.NET 2005] Envoi Email HTML (exchange)
    Par Flibustier dans le forum Windows Forms
    Réponses: 1
    Dernier message: 18/07/2006, 23h46
  5. Recuperer sujet et date d'emails sur un serveur POP3
    Par Limod dans le forum Réseau/Web
    Réponses: 1
    Dernier message: 28/09/2005, 19h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo