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

ASP.NET Discussion :

Problème Encoding lors de récupération de Mail


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Par défaut Problème Encoding lors de récupération de Mail
    Bonsoir à tous,

    J'ai une procédure de récupération d'e-mail sur un serveur POP qui fonctionne parfaitement. Le seul souci, c'est que les caractères d'accent comme é ô etc sont remplacés par un code du style : "=?ISO-8859-1?Q?J=E9r=F4me", au lieu de "Jérôme" (c'est l'expéditeur sujet de mon e-mail).

    Je sais qu'il y a un problème d'Encoding, mais étant donné que je connais mal ce sujet, je vous pose la question. Voici ma procédure :

    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
        protected void Button1_Click(object sender, EventArgs e)
        {
            // Create a TCP client for a TCP connection
            TcpClient tcpClient = new TcpClient();
            txtLog.Text = "DEMANDE :<br>Se connecter sur " + txtServer.Text + " port " + txtPort.Text + "<br><br>";
            // Connect this TCP client to the server IP/name and port specified in the form
            tcpClient.Connect(txtServer.Text, Convert.ToInt32(txtPort.Text));
            // Create a network stream to retrieve data from the TCP client
            NetworkStream netStream = tcpClient.GetStream();
            // We need a stream reader to be able to read the network stream
            System.IO.StreamReader strReader = new System.IO.StreamReader(netStream, Encoding.ASCII);
            // If the connection was made successfully
            if (tcpClient.Connected)
            {
                txtLog.Text += "REPONSE :<br>" + strReader.ReadLine() + "<br><br>";
                // Buffer to which we're going to write the commands
                byte[] WriteBuffer = new byte[1024];
                // We're passing ASCII characters
                ASCIIEncoding enc = new System.Text.ASCIIEncoding();
                // Pass the username to the server
                WriteBuffer = enc.GetBytes("USER " + txtUser.Text + "\r\n");
                txtLog.Text += "DEMANDE :<br>Here's the username: " + txtUser.Text + "<br><br>";
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                txtLog.Text += "REPONSE :<br>" + strReader.ReadLine() + "<br><br>";
                // Pass the password to the server
                WriteBuffer = enc.GetBytes("PASS " + txtPass.Text + "\r\n");
                txtLog.Text += "DEMANDE :<br>Here's the password: " + txtPass.Text + "<br><br>";
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                txtLog.Text += "REPONSE :<br>" + strReader.ReadLine() + "<br><br>";
     
     
     
                // Maintenant que l'on est connecté, on demande la liste des messages
                WriteBuffer = enc.GetBytes("LIST\r\n");
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                string ListMessage;
     
                txtLog.Text += "<b>Liste des messages</b><br><br>";
     
                // On récupère le nombre de messages
                int nbrMessage = 2;
                int i = 1;
     
                while (true)
                {
                    ListMessage = strReader.ReadLine();
                    if (ListMessage == ".")
                    {
                        // It's the last message so exit the loop and continue
                        break;
                    }
                    else
                    {
                        if (i == 1)
                        {
                            //Premier passage : on récupère le nombre de messages
     
                            nbrMessage = Convert.ToInt32(ListMessage.Substring(4, (ListMessage.IndexOf("m") - 5)).ToString());
                            txtLog.Text += "Nombre de messages : " + nbrMessage.ToString() + "<br><br>Numéro et taille : <br>";
     
                            i++;
     
                            continue;
                        }
                        else
                        {
                            // List the message
                            txtLog.Text += ListMessage + "<br>";
     
                            i++;
     
                            continue;
                        }
                    }
     
     
                }
     
                txtLog.Text += "<br><b>Affichage des messages</b><br>";
     
                for (int k = 1; k <= nbrMessage; k++)
                {
                    // Maintenant, afficher les messages
                    txtLog.Text += "<i>Message numéro " + k.ToString() + "</i><br>";
                    WriteBuffer = enc.GetBytes("RETR " + k.ToString() + " \r\n");
                    netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
     
                    string MESSAGE="";
     
                    string From="";
                    string Sujet="";
                    string Contenu="";
     
                    string sTemp = strReader.ReadLine();
     
                    if (sTemp[0] != '-')
                    {
     
                        while (sTemp != ".")
                        {
                            MESSAGE += sTemp + "<br>";
                            sTemp = strReader.ReadLine();
     
                            if (sTemp.Length != 0)
                            {
                                if (sTemp.Length >= 5)
                                {
                                    if (sTemp.Substring(0, 5) == "From:")
                                        From = sTemp.Substring(5, sTemp.Length - 5);
                                }
                                if (sTemp.Length >= 8)
                                {
                                    if (sTemp.Substring(0, 8) == "Subject:")
                                        Sujet = sTemp.Substring(8, sTemp.Length - 8);
                                }
                            }
                        }
     
     
                    }
     
                    try { Contenu = MESSAGE.Substring(MESSAGE.IndexOf("Content-Type: text/html; charset=ISO-8859-1")); }
                        catch { }
     
                    Contenu = Contenu.Trim().Substring(0, Contenu.Length - 36);
                    Contenu = Contenu.Trim().Substring(43, Contenu.Length - 43); // Suppression de Content-Type: text/html; charset=ISO-8859-1 et du code a la fin
                    if (Contenu.IndexOf("Content-Transfer-Encoding: quoted-printable") > -1) Contenu = Contenu.Trim().Substring(Contenu.IndexOf("Content-Transfer-Encoding: quoted-printable") + 43, Contenu.Length - (Contenu.IndexOf("Content-Transfer-Encoding: quoted-printable") + 43));
     
                    txtLog.Text += "from : " + From + "<br>Sujet : " + Sujet + "<br>Corps : <input type=text value=\"" + Contenu.Replace("\"","'")+"\"><br>";
     
     
                }
     
                txtLog.Text += "DEMANDE :<br>Merci, déconnexion...<br><br>";
                WriteBuffer = enc.GetBytes("QUIT\r\n");
                netStream.Write(WriteBuffer, 0, WriteBuffer.Length);
                txtLog.Text += "REPONSE :<br>" + strReader.ReadLine();
     
                tcpClient.Close();
            }
            else txtLog.Text = "Non connecté";
     
        }
    Quelqun peut-il me dire où se trouve le PB ?

    Merci,

    FoxDeltaSierra

  2. #2
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    La plupart du temps il s'agit d'un defaut d'interpretation de l'encodage. Dans ton code, tu utilises l'encodage ASCII pour lire le flux. Il est fort probable qu'il s'agit en faut d'un encodage UTF8. Essayes le pour voir.

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    249
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 249
    Par défaut
    Merci oui avec UTF8 ca a l'air de marcher... enfin bizarre car j'avais déjà essayé et ca ne faisait rien.

    Merci !

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

Discussions similaires

  1. Réponses: 1
    Dernier message: 19/05/2010, 12h27
  2. Problème récupération corps mail
    Par plou_fr dans le forum Web & réseau
    Réponses: 5
    Dernier message: 02/10/2008, 20h20
  3. [Entourage] Problème lors du transfert de mails
    Par sami_c dans le forum Apple
    Réponses: 8
    Dernier message: 24/10/2007, 14h23
  4. Problème aléatoire lors de l'envoi d'un mail
    Par exclusif dans le forum VB.NET
    Réponses: 7
    Dernier message: 31/07/2007, 18h55
  5. Problème de récupération des mails hors intranet
    Par orion57 dans le forum Applications et environnements graphiques
    Réponses: 1
    Dernier message: 03/02/2007, 15h43

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