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 :

Récupération de pièces jointes via Mails (Pop)


Sujet :

Windows Forms

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut Récupération de pièces jointes via Mails (Pop)
    Bonjour à tous,
    Voilà maintenant plusieurs semaines que je suis sur une application. Dans celle-ci, j'ai mis en place un système de récupération de données contenues dans des fichiers textes. Donc on clique sur un bouton, un OpenFileDialog s'ouvre, on sélectionne un ou plusieurs fichiers, à la main, puis "OK", puis le reste se fait tout seul!
    Seulement pour des raisons pratiques, j'aimerais pouvoir récupérer ces fichiers (que je reçois par mail) directement par ce principe:

    Les mails contenant ces fichiers en pièces jointes, ont un titre spécifique, donc,
    d'abord lire les mails, si un mail contient le titre spécifié, alors récupérer ses pièces jointes, les "balancer" dans mon système de début pour les lire (déjà fait pour le système de lecture), écrire vite fait dans un log les opérations menées, effacer ce dernier mail, passer au suivant (si existe), etc...

    Pouvez-vous m'aider vraiment comment faire, je suis perdu . En utilisant 3 paramètres Pop (PopName, UserName, MdpUser).

    Je suis vraiment perdu de chez perdu, j'ai beau chercher des tutos et tout, je vois pas comment faire...
    Merci d'avance à tous...

  2. #2
    Rédacteur
    Avatar de Paul Musso
    Profil pro
    Inscrit en
    Août 2008
    Messages
    368
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Août 2008
    Messages : 368
    Par défaut
    Bonjour,

    Cette petite librairie devrait t'aider. Par contre je n'arrive pas à y accéder depuis le boulot. Dis moi si ça te convient. Normalement avec celle-ci, tu devrais pouvoir facilement télécharger des pièces jointes de mail.

  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
    bizarre que tu galères ou ait besoin d'une API

    http://lgmorand.developpez.com/dotnet/mail/
    j'ai fais ca il y a longtemps et très rapidement j'ai réussi à traiter les mails et savoir quand ca contenait une pièce jointe. En gros, ca revient pour toi à simplement lire l'entête et en extraire le contenu encodé de chaque PJ

  4. #4
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    Louis Guillaume, ton code est trop compliqué à utiliser, des erreurs sont générées partout, donc j'ai utilisé des bouts de codes ailleurs, et voici donc ce que j'ai:

    • 3 textbox contenant : ServeurPOP3, Login, Pass (je voudrais pouvoir les mettre dans un fichier XML, mais je verrais apres);
    • Un bouton qui se connecte au Serveur, et m'envoie dans une Texbox ReadOnly le nombre de messages.
    • Une Textbox de saisi de numéro de message voulu;
    • Un bouton pour récupérer les pièces jointes du message sélectionné;


    Maintenant, pas mal de truc reste incompris chez moi, comme les regex ,et j'ai du mal à comprendre tout le fonctionnement de certaines parties...

    Pouvez-vous m'aider pour maintenant atteindre mon but, c'est à dire, lire un à un les message, et si l'intitulé = "XXX" alors enclencher mon bouton de récupération de pièces jointes du message, apres je fais ma fonction de lecture/récup de données, passer au message suivant s'il existe...

    Voilà mon code:

    Dans ma FormPrincipale :


    Bouton de connection au serveur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    try
                {
                    pop = new Pop(tb_pop.Text, tb_login.Text, tb_pass.Text, @"C:\\xxxxxxx");
                    tb_cononco.Text = "Connecté";
                    tb_nbmails.Text = pop.CountMails.ToString();                
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message + "\n\n" + exc.StackTrace);
                }
    Bouton de récup des pièces jointes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     try
                {
                    pop.GetMail(Int32.Parse(textBox2.Text));                
                }
                catch (Exception exc)
                {
                    MessageBox.Show(exc.Message + "\n\n" + exc.StackTrace);
                }

    Dans ma Classe Pop :

    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
    using System;
    using System.Net;
    using System.Net.Sockets;
    using System.Collections;
    using System.IO;
     
    struct Identifiant
    {
        public string server;
        public string user;
        public string password;
    }
     
    namespace Gestion
    {
        class Pop
        {
            Identifiant identifiant;
            string localDirectory;
     
            public Pop(string server, string user, string password, string localDirectory)
            {
                this.identifiant = new Identifiant();
                this.identifiant.server = server;
                this.identifiant.user = user;
                this.identifiant.password = password;
                this.localDirectory = localDirectory;
     
            }
     
     
            public int CountMails
            {
                get { return GetNumberOfNewMessages(); }
            }
     
     
            public Mail GetMail(int index)
            {
                NetworkStream ns = Connect();
                Mail mail = new Mail(ns, index, this.localDirectory);
                ns.Close();
                return mail;
            }
     
     
            private NetworkStream Connect()
            {
                TcpClient sender = new TcpClient(this.identifiant.server, 110);
                Byte[] outbytes;
                string input;
                NetworkStream ns = null;
     
                ns = sender.GetStream();
                StreamReader sr = new StreamReader(ns);
                Console.WriteLine(sr.ReadLine());
     
                input = "user " + this.identifiant.user + "\r\n";
                outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
                ns.Write(outbytes, 0, outbytes.Length);
                Mail.Recv(ns, 10);
     
                input = "pass " + this.identifiant.password + "\r\n";
                outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
                ns.Write(outbytes, 0, outbytes.Length);
                Mail.Recv(ns, 10);
     
                return ns;
            }
     
     
            private int GetNumberOfNewMessages()
            {
                NetworkStream ns = Connect();
                string cmd;
                string rep;
     
                // Envoi de la commande
                cmd = "stat";
                Mail.Send(cmd, ns);
     
                // Recuperation du resultat
                rep = Mail.Recv(ns, 15);
     
                string[] repList = rep.Split(' ');
                if (repList.Length != 3)
                    throw new Exception("Reponse du serveur POP incorrect : " + rep);
     
                return Int32.Parse(repList[1]);
            } 
     
        }
    }

    Dans ma Classe Mail :

    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
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    145
    146
    147
    148
    149
    150
    151
    152
    153
    154
    155
    156
    157
    158
    159
    160
    161
    162
    163
    164
    165
    166
    167
    168
    169
    170
    171
    172
    173
    174
    175
    176
    177
    178
    179
    180
    181
    182
    183
    184
    185
    186
    187
    188
    189
    190
    191
    192
    193
    194
    195
    196
    197
    198
    199
    200
    201
    202
    203
    204
    205
    206
    207
    208
    209
    210
    211
    212
    213
    214
    215
    216
    217
    218
    219
    220
    using System;
    using System.Net.Sockets;
    using System.IO;
    using System.Collections;
    using System.Text.RegularExpressions;
     
    struct HeadMail
    {
        public string From;
        public string To;
        public string Date;
    }
     
    namespace Gestion
    {
        class Mail
        {
            // VARIABLES		
            ArrayList head;
            ArrayList body;
            ArrayList brutCodedJoinPieces;	// Contains brutCodedJoinPieces
            ArrayList CodedJoinPieces;		// Contains a list of CodedJoinPieces
            HeadMail headMail;
            string localDirectory;
            int mailNumber;
     
            NetworkStream networkStream;	// Handle sur la connexion
     
            // CONSTRUCTEURS
            public Mail(NetworkStream ns, int number, string localDirectory)
            {
                this.head = new ArrayList();
                this.body = new ArrayList();
                this.brutCodedJoinPieces = new ArrayList();
                this.CodedJoinPieces = new ArrayList();
     
                this.networkStream = ns;
                this.mailNumber = number;
                this.localDirectory = localDirectory;
     
                this.GetMessage(this.mailNumber);
                this.GetHeadersMail(head);
                //this.GetJoinPieces(); // Doit traiter les pieces jointes divisés (A FAIRE)
     
                foreach (ArrayList pieceJointe in CodedJoinPieces)
                {
                    JoinPiece jp = new JoinPiece();
                    jp.GetData(pieceJointe);
                    jp.Export(localDirectory);
                }
            }
     
            // PROPRIETES
            public ArrayList Head
            {
                get { return head; }
            }
     
            public ArrayList Body
            {
                get { return body; }
            }
     
     
            // METHODES
            public static void Send(string cmd, NetworkStream ns)
            {
                string input = cmd + "\r\n";
                Byte[] outbytes = System.Text.Encoding.ASCII.GetBytes(input.ToCharArray());
                ns.Write(outbytes, 0, outbytes.Length);
            }
     
     
            public static ArrayList Recv(NetworkStream ns, string lastChar)
            {
                ArrayList list = new ArrayList();
                string returnValue = "";
                StreamReader sr = new StreamReader(ns);
     
     
                while (returnValue != lastChar)
                {
                    returnValue = sr.ReadLine();
                    list.Add(returnValue.ToString());
                }
     
                return list;
            }
     
            public static string Recv(NetworkStream ns, int length)
            {
                string returnValue = "";
     
                byte[] read = new byte[length];
                ns.Read(read, 0, length);
                returnValue = System.Text.Encoding.ASCII.GetString(read);
     
                return returnValue;
            }
     
            private void GetMessage(int number)
            {
                Send("retr " + number, networkStream);
                ArrayList brutmail = Recv(networkStream, ".");
                string boundary = SearchBoundary(brutmail);
     
                ArrayList pointeur;
     
                pointeur = head;
                Regex regEx = new Regex("^([-]*)?" + boundary + ".*", RegexOptions.IgnoreCase);
                foreach (string line in brutmail)
                {
                    if (regEx.IsMatch(line))
                    {
                        if ((pointeur != body) && (pointeur != head) && (boundary != ""))
                        {
                            if (pointeur.Count > 0)
                                CodedJoinPieces.Add(pointeur);
                            pointeur = new ArrayList();
                            continue;
                        }
                        if ((pointeur == body) && (boundary != ""))
                        {
                            pointeur = new ArrayList();
                            continue;
                        }
                        if (pointeur == head)
                        {
                            pointeur = body;
                            continue;
                        }
                    }
                    if ((pointeur.Count == 0) && (line == ""))
                        continue;
                    pointeur.Add(line);
                }
                if ((pointeur != body) && (pointeur != head) && (boundary != ""))
                {
                    if (pointeur.Count > 0)
                        CodedJoinPieces.Add(pointeur);
                }
     
     
            }
     
     
            /// <summary>
            /// Permet de séparer les pieces jointes multiples
            /// </summary>
            private void GetJoinPieces()
            {
                string boundary = SearchBoundary(brutCodedJoinPieces);
     
                // Si boundary == "" : Alors il n'existe qu'une seule piece jointe
                if (boundary.ToString() == "")
                {
                    this.CodedJoinPieces.Add(brutCodedJoinPieces);
                    return;
                }
                // Sinon il existe plusieurs pieces jointes :
                ArrayList pieceJoint = new ArrayList();
                foreach (string line in brutCodedJoinPieces)
                {
                    if (line == boundary)
                    {
                        if (pieceJoint.Count > 0)
                        {
                            CodedJoinPieces.Add(pieceJoint);
                            pieceJoint = new ArrayList();
                        }
                        continue;
                    }
                    pieceJoint.Add(line);
                }
                CodedJoinPieces.Add(pieceJoint);
     
            }
     
            public static string SearchBoundary(ArrayList brutMail)
            {
                Regex regBoundary = new Regex("boundary=\"(.*)\"$", RegexOptions.IgnoreCase);
                string boundary = "";
                foreach (string line in brutMail)
                {
                    if (regBoundary.IsMatch(line))
                    {
                        boundary = regBoundary.Match(line).Captures[0].ToString();
                        break;
                    }
                }
                string[] boundaryLine = boundary.Split('"');
                if (boundaryLine.Length > 1)
                    return boundaryLine[1];
                else
                    return "";
            }
     
            /// <summary>
            /// Sépare la partie en tete, message et pieces jointes
            /// </summary>
            /// <param name="mailcontent"></param>
            private void GetHeadersMail(ArrayList mailContent)
            {
                Regex regDate = new Regex("^Date:", RegexOptions.IgnoreCase);
                Regex regFrom = new Regex("^From:", RegexOptions.IgnoreCase);
                Regex regTo = new Regex("^To:", RegexOptions.IgnoreCase);
     
     
                foreach (string line in mailContent)
                {
                    if (regDate.IsMatch(line) && (this.headMail.Date == null))
                        this.headMail.Date = line.Substring(5).Trim();
                    if (regFrom.IsMatch(line) && (this.headMail.From == null))
                        this.headMail.From = line.Substring(5).Trim();
                    if (regTo.IsMatch(line) && (this.headMail.To == null))
                        this.headMail.To = line.Substring(3).Trim();
                }
            }
        }
    }

    Dans ma Classe Mail :

    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.Net.Sockets;
    using System.IO;
    using System.Collections;
    using System.Text.RegularExpressions;
    using System.Text;
     
    namespace Gestion
    {
        class JoinPiece
        {
            // VARIABLES
            ArrayList brutPieceJoin;
            ArrayList header;
            ArrayList codedData;
            ArrayList decodedData;
            string filename;
            string encoding;
            string localDirectory;
     
     
            // CONSTRUCTEURS
            public JoinPiece()
            {
                this.header = new ArrayList();
                this.codedData = new ArrayList();
                this.decodedData = new ArrayList();
                this.brutPieceJoin = new ArrayList();
     
            }
     
            // METHODES
            public void GetData(ArrayList brutData)
            {
                this.brutPieceJoin = brutData;
                Regex regEx = new Regex("filename=.*$");
                Regex regExCoding = new Regex("^Content-Transfer-Encoding:", RegexOptions.IgnoreCase);
                Regex regExFile = new Regex(@"[^?]+\?[^?]+?.*", RegexOptions.IgnoreCase);
                ArrayList pointeur;
                pointeur = header;
                string filename;
     
                foreach (string line in this.brutPieceJoin)
                {
                    // Recuperation du codage du contenu
                    if ((pointeur == header) && (regExCoding.IsMatch(line)))
                        this.encoding = line.Substring("Content-Transfer-Encoding:".Length).Trim();
     
     
                    // Passage à la sauvegarde du contenu codé
                    if (line.Equals(""))
                    {
                        pointeur = this.codedData;
                        continue;
                    }
     
                    if (regEx.IsMatch(line) && (this.filename == null))
                    {                    
                        filename = regEx.Match(line).Captures[0].ToString();
                        filename = filename.Replace("filename=\"", "");
                        this.filename = filename.Replace("\"", "");
                    }
                    pointeur.Add(line);
                }
            }
     
            public static string base64Decode(string data)
            {
                System.Text.UTF8Encoding encoder = new System.Text.UTF8Encoding();
                System.Text.Decoder utf8Decode = encoder.GetDecoder();
     
                byte[] todecode_byte = Convert.FromBase64String(data);
                int charCount = utf8Decode.GetCharCount(todecode_byte, 0, todecode_byte.Length);
                char[] decoded_char = new char[charCount];
                utf8Decode.GetChars(todecode_byte, 0, todecode_byte.Length, decoded_char, 0);
                string result = new String(decoded_char);
                return result;
            }
     
            public void Export(string localDirectory)
            {
                byte[] bytes;
                StreamWriter str;
                BinaryWriter bWr;
     
                if (codedData.Count == 0)
                    return;
     
                if (this.filename == null)
                    throw new Exception("Nom de fichier de la pièce jointe introuvable");
                if (this.filename.ToString().Equals(""))
                    throw new Exception("Nom de fichier de la pièce jointe introuvable");
     
                str = new StreamWriter(localDirectory + Path.DirectorySeparatorChar + this.filename);
     
                if (encoding.ToLower() == "base64")
                {
                    bWr = new BinaryWriter(str.BaseStream);
     
                    foreach (string line in codedData)
                    {
                        bytes = Convert.FromBase64String(line);
                        bWr.Write(bytes);
                    }
                }
                else
                {
                    foreach (string line in codedData)
                    {
                        str.Write(line);
                    }
                }
                str.Close();
            }
        }
    }
    bon ça fait un peu tout le code balancé, mais c'est pour que voyiez au mieux ma situation...

    Merci beaucoup.

  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
    t'es quand même le premier en trois ans en me disant que le code est compliqué. s'il compile pas directement, il te manque des ressources mais l'appli était totalement fonctionnelle puisque pendant trois jours entiers c'était mon client mail par défaut (bien sûr je l'avais complété pour gérer les mailto: et les PJ)

    c'est quoi? "\n\n" double nouvelle ligne? pourquoi pas faire comme tout le monde avec le \r\n ou le Environnement.NewLine?


    ensuite, beaucoup de trucs sont des erreurs qui vont te paraitre minimes mais qui sont flagrantes comme une textbox pour saisir un entier? y a un custom validator? ou maskedTextbox? parce que le Int32.Parse sans test...


    pour les regex, encore un article à moi (pas ma faute) mais si tu le lis et le comprend, t'auras aucun mal à comprendre les regex de ta classe
    http://lgmorand.developpez.com/dotnet/regex/

    tu verras surtout plutard que les regex servent plein de fois dans la vie d'un développeur

    pour le reste, je m'obstine tu devrais reprendre mon code car
    1- je me connecte
    2- je recupere tous les mails
    3- je les traite un par un
    (ce qui est exactement le même début que toi)
    ensuite là où moi je les affiche avec leurs info et leur contenu, t'as juste à lire leur contenu, extraire la PJ et la sauvegarder dans un dossier local.

    mon code te montrera aussi comment passer au suivant jusqu'à ce qu'il n'y en ait plus. je te dis pas de reprendre le code tel quel et le copier, je l'ai écris quand je débutais le .Net (et il est cochon sur plein de points) mais néanmoins, l'idée est là et ca fonctionne

  6. #6
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    Bon ok, je me suis peut etre emporté en disant qu'il était compliqué
    Allez, j'en ai marre là, Ctr-A , Suppr...
    Mr Morand tu sera désormais mon dieu, et tes tutos ma bible! Je me plonge dedans dès maintenant...

    Merci encore.

  7. #7
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    Alors c'est bon j'ai réussi, j'ai fait comme tu m'a dit, le problème c'est qu'à force de chercher sur le web, prendre quelques lignes, assembler le tout, incorporer le boulot dans le reste, il me faut maintenant incorporer le reste dans mon big projet... et j'ai trop de mal... Tantot c'est la référence à une ressource qu'il me dit, alors que j'ai copié collé les ressources manquantes dans le dossier ressources...
    N'y a-t-il pas de moyen de joindre 2 projet, car du coups tout ce que je viens de faire, doit répondre à l'événement d'un clic...alors on peux pas juste lancer un projet non? (trop simple ), et sinon comment fusionner proprement 2 projets??

    Merci encore beaucoup à Louis-Guillaume (que j'écrive pas juste l'un des deux prénoms ) pour ton help!

  8. #8
    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
    prend l'habitude de toujours faire un projet pour l'interface et un projet pour le traitement des mails.
    par exemple, TOUT le traitement pop (connexion, parsing d'une string, etc) doit si possible être dans un namespace particulier et dans un projet de type bibliothèque. ca permet de l'ajouter facilement à un autre projet.

  9. #9
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    argh...je suis bon à tout me retaper? Misère...Misère... Bon bah demain: au boulot! Merci pour les infos, je vais tenter de faire comme tu me dis, même si je galère, ça me servira dans le futur.

  10. #10
    Membre confirmé Avatar de Saten
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    203
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 203
    Par défaut
    C'est bon j'ai réussi à tous rassembler en éléminant toutes les erreurs!
    Bon c'est pas joli joli, mais c'est trop tard pour refaire le code...donc bon...

    Un grand merci à Louis-Guillaume pour son aide continuelle.

    Tchu

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [10gR2] Envoi de mail avec pièce jointe via un form
    Par Lylye dans le forum Forms
    Réponses: 0
    Dernier message: 01/03/2013, 15h52
  2. [Forum] Envoi piéce jointe via un mail en php
    Par forzaakz dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 0
    Dernier message: 04/01/2012, 11h25
  3. [AC-2007] Envoyer par mail 2 pièces jointes via access et lotus notes
    Par Debutant10 dans le forum VBA Access
    Réponses: 10
    Dernier message: 12/08/2011, 09h34
  4. [AC-2007] Envoi pièce jointe via mail ?
    Par fragglerick dans le forum VBA Access
    Réponses: 9
    Dernier message: 23/05/2011, 13h49
  5. Envoi Pièce Jointe par Mail via 4D
    Par mxh77 dans le forum 4D
    Réponses: 6
    Dernier message: 25/09/2007, 18h05

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