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

C++ Discussion :

Envois de header SMTP


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 42
    Par défaut Envois de header SMTP
    Bonjour,

    J'ai fait une petite application pour envoyer des mails via socket sur serveur SMTP... Tout fonctionne à merveille... sauf que... dès que je mets des informations "header" je recois un message d'erreur 503 bad sequence...

    Voici le code qui fonctionne sauf si j'active les headers spécifiques au type de contenu :

    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
     
    #include <iostream>
    #include <winsock.h> // Windows Sockets... Required by MySQL API
     
    using namespace std;
     
    SOCKET sock = 0;   
     
    void process( char * buffer )
    {
       Sleep( 500 );
       int    size   = strlen( buffer );
       int    retVal = send( sock, buffer, size, 0 );
     
       char buf[ 1024 ];
       buf[0] = 0x00;
       while( !buf[0] )
       {
          int yeah = recv(sock, buf, 1024, 0 );
       }  
       cout << "RECEIVED > " << buf;
       cout << "SENT     < " << buffer;
    }
     
     
    int main(int argc, char *argv[])
    {
        WSADATA wsaData;
        if(WSAStartup(0x0101, &wsaData) != 0)
        {
            cout << endl << "*** WSAStartup() failed ! ***" << endl;
      	    WSACleanup();  // just in case ...
            exit(0);
        }
        else
        {
            cout << endl << "*** WSAStartup() success ! ***" << endl;
            SOCKADDR_IN sin;
            sin.sin_addr.s_addr	= inet_addr("192.168.1.2");
            sin.sin_family		= AF_INET;
            sin.sin_port		= htons(25);
            sock = socket(AF_INET,SOCK_STREAM,0);
     
            if (sock < 0)
            {
               cout << "*** Could not open the TCP socket ! ***" << endl;
               exit(0);
            }
            else
            {
                cout << "*** TCP socket ok ! ***" << endl;
                connect(sock, (SOCKADDR *)&sin, sizeof(sin));
     
                process("HELO TEST\r\n");
                process("MAIL From:<me.myself@mail.com>\r\n");
                process("RCPT To:<admin@xeena.be>\r\n");
                // process("X-Priority: Normal\r\n");
                // process("X-Sender: The header tester\r\n");
                // process("MIME-Version: 1.0\r\n");
                // process("Content-Type: text/plain;charset=\"iso-8859-1\"\r\n");
                // process("Content-Transfer-Encoding: 8bit\r\n");
                process("DATA\r\n");
                process("Subject:test test\r\n\r\n");
                process("test test test\r\n.\r\n");
                process("QUIT\r\n");
     
                closesocket(sock);
     
                WSACleanup();
            }
        }
        return 0;
    }
    J'ai parcouru toute la RFC sur le SMTP, plein de forum, plein de code sources et généralement eux n'ont pas de problème... Quelque chose m'échappe

  2. #2
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Les instructions:


    // process("X-Priority: Normal\r\n");
    // process("X-Sender: The header tester\r\n");
    // process("MIME-Version: 1.0\r\n");
    // process("Content-Type: text/plain;charset=\"iso-8859-1\"\r\n");
    // process("Content-Transfer-Encoding: 8bit\r\n");


    décrivent le corps du message: elles doivent être passées après la réception du OK de la commande DATA.

    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 42
    Par défaut
    Merci !

    Je viens de corriger mais... hélas... une fois placé après, mon apllication fait un "freeze" et le serveur fait un timeout... Bizarre Bizzare

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2008
    Messages
    42
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Février 2008
    Messages : 42
    Par défaut
    Ok j'ai compris... la partie data doit être envoyée d'un seul tenant sinon... il attend la balise de fin jusqu'au "timeout"... C'est apparement le while du buffer qui fait des misères... Comme il ne reçois rien il tourne en boucle infinie... zut alors....

    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
    // #include <cstdlib>
    #include <iostream>
    #include <winsock.h>
     
    using namespace std;
     
    SOCKET sock = 0;   
     
    void process( char * buffer )
    {
       Sleep( 1000 );
       int    size   = strlen( buffer );
       int    retVal = send( sock, buffer, size, 0 );
     
       char buf[ 1024 ];
       buf[0] = 0x00;
       while( !buf[0] )
       {
          int yeah = recv(sock, buf, 1024, 0 );
       }  
       cout << "RECEIVED > " << buf;
       cout << "SENT     < " << buffer;
    }
     
     
    int main(int argc, char *argv[])
    {
        WSADATA wsaData;
        if(WSAStartup(0x0101, &wsaData) != 0)
        {
            cout << endl << "*** WSAStartup() failed ! ***" << endl;
      	    WSACleanup();  // just in case ...
            exit(0);
        }
        else
        {
            cout << endl << "*** WSAStartup() success ! ***" << endl;
            SOCKADDR_IN sin;
            sin.sin_addr.s_addr	= inet_addr("192.168.1.2");
            sin.sin_family		= AF_INET;
            sin.sin_port		= htons(25);
            sock = socket(AF_INET,SOCK_STREAM,0);
     
            if (sock < 0)
            {
               cout << "*** Could not open the TCP socket ! ***" << endl;
               exit(0);
            }
            else
            {
                cout << "*** TCP socket ok ! ***" << endl;
                connect(sock, (SOCKADDR *)&sin, sizeof(sin));
     
                process("HELO MASS MAILER\r\n");
                process("MAIL From:<me.myself@mail.com>\r\n");
                process("RCPT To:<admin@xeena.be>\r\n");
                process("DATA\r\n");
                process("X-Priority: Normal\r\nX-Sender: test\r\nDATE: Sat 22 Jun 1996 14:15:10 -0400\r\nMIME-Version: 1.0\r\nContent-Type: text/plain;charset=\"iso-8859-1\"\r\nContent-Transfer-Encoding: 8bit\r\nSubject:test test\r\n\r\ntest test test\r\n.\r\n");
                process("QUIT\r\n");
     
                closesocket(sock);
     
                WSACleanup();
            }
        }
        return 0;
    }
    Le code ci-dessus fonctionne !!!!

    Merci encore

    A+

  5. #5
    Expert éminent
    Homme Profil pro
    Architecte technique retraité
    Inscrit en
    Juin 2008
    Messages
    21 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : Architecte technique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2008
    Messages : 21 738
    Par défaut
    Citation Envoyé par suntsu Voir le message
    Ok j'ai compris... la partie data doit être envoyée d'un seul tenant sinon... il attend la balise de fin jusqu'au "timeout"... C'est apparement le while du buffer qui fait des misères... Comme il ne reçois rien il tourne en boucle infinie... zut alors....
    Par défaut, la partie DATA est expédiée sous la forme de 'lignes' d'au plus 1000 caractères terminées par "\r\n".
    La fin du message est signalée par une ligne réduite à ".\r\n".
    => Si le serveur n'essaie pas de détecter la fin du message, il pourra attendre longtemps.
    - W
    Architectures post-modernes.
    Python sur DVP c'est aussi des FAQs, des cours et tutoriels

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

Discussions similaires

  1. Javamail : envoi via le SMTP Free
    Par SkyBioSS dans le forum API standards et tierces
    Réponses: 29
    Dernier message: 06/03/2013, 10h53
  2. [VB.Net]envois de email SMTP
    Par Ouija33 dans le forum Contribuez
    Réponses: 7
    Dernier message: 25/01/2012, 11h45
  3. Probleme envoi de mail/SMTP
    Par verbal34 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 01/08/2008, 10h55
  4. [Windows 2003] Envoi de mail smtp, erreur
    Par Amiba dans le forum Windows Serveur
    Réponses: 6
    Dernier message: 22/11/2007, 12h23
  5. petit trou de mémoire avec CDO.Configuration envoie de mail SMTP
    Par thierry007 dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 12/09/2006, 21h39

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