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 :

[E-Mail] MIME codage (base64?) pour piece jointe en PDF


Sujet :

C++

  1. #1
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut [E-Mail] MIME codage (base64?) pour piece jointe en PDF
    Bonjour,

    Je souhaite envoyer un mail avec pièce jointe depuis mon appli C++ sans passer par une librairie (indy, TNMSMTP ou autre).

    J'ai attrapé un peu de code sur le net (basé sur les sockets) qui semble plutot bien fonctionner sans pièce jointe. Le code est ici : http://www.iprelax.fr/smtp/smtp_prog6.php

    Le but principal étant d'envoyer une pièce jointe (en pdf), j'ai adapté l'entête pour inclure le type MIME. la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process( "Subject: Yeah !!!\r\n\r\nEt voici un petit mail !\r\n.\r\n" );
    est remplacée par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Process( "MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"separateur\"\r\n\r\n--separateur\r\nContent-Type: text/plain;charset=\"us-ascii\"\r\nContent-Transfer-Encoding: 7bit\r\n\r\nceci est un message au format texte.\r\n\r\n--separateur\r\nContent-Type: application/pdf;nname=\"D:\\texte.txt\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment;filename=\"texte.txt\"\r\n\r\n\"Q2VjaSBlc3QganVzdGUgdW4gcGV0aXQgdGVzdCAhCg\"--separateur--\r\n.\r\n");
    Lorsqu'il s'agit d'un fichier texte, ca se passe presque bien (j'arrive à ouvrir le fichier recu, il y a juste quelques caractères indésirables en fin de fichier).

    Mais dès que je souhaite envoyer un pdf, je ne parviens pas à l'ouvrir à la réception et il fait pas la même taille que le fichier d'origine. Est ce que cela pourrait venir de l'encodage (base64) ?

    Merci de vos conseils

  2. #2
    Expert éminent

    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    4 253
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2007
    Messages : 4 253
    Points : 7 618
    Points
    7 618
    Billets dans le blog
    3
    Par défaut
    ca ressemble plus à un problême de boundaries....

    essayes déjà d'écrire la chaine sous la forme:
    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
     
    const char* data =
     "MIME-Version: 1.0\r\n"
     "Content-Type: multipart/mixed; boundary=\"separateur\"\r\n\"
     "\r\n"
     "--separateur\r\n"
     "Content-Type: text/plain;charset=\"us-ascii\"\r\n"
     "Content-Transfer-Encoding: 7bit\r\n"
     "\r\n"
     "ceci est un message au format texte.\r\n"
     "\r\n"
     "--separateur\r\n"
     "Content-Type: application/pdf;nname=\"D:\\texte.txt\"\r\n"
     "Content-Transfer-Encoding: base64\r\n"
     "Content-Disposition: attachment;filename=\"texte.txt\"\r\n"
     "\r\n"
     "\"Q2VjaSBlc3QganVzdGUgdW4gcGV0aXQgdGVzdCAhCg\""
     "--separateur--\r\n"
     ".\r\n"
     ;
    En particulier le dernier separateur me semble étrange (mais ca fait longtemps que j'ai pas touché du direct MIME mail )
    N'oubliez pas de cliquer sur mais aussi sur si un commentaire vous a été utile !
    Et surtout

  3. #3
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Est-ce que ton PDF est bien réencodé en base64 comme indiqué?

  4. #4
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    nicroman : Le dernier séparateur a pirori doit se terminer par deux tirets...

    3DArchi : Pour l'encodage, j'ai utilisé une fonction trouvée sur le même site que le reste :
    http://www.iprelax.fr/mime/mime_prog2.php

    Comment est ce que je peux savoir s'il a bien été encodé sachant qu'il en devient illisible? A la réception, le fichier pdf fait 400 Octets (il en faisait 11kO au départ) et le message d'erreur est : "Une erreur est survenue lors de l'ouverture de ce document. Le fichier est endommagé et n'a pas pu être réparé"

    A noter que pour l'envoyer, je l'encode donc en base64 puis je le lis tel un fichier texte (fopen, fread) et j'envoie tous les caractères que je lis.

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par lhpp Voir le message
    3DArchi : Pour l'encodage, j'ai utilisé une fonction trouvée sur le même site que le reste :
    http://www.iprelax.fr/mime/mime_prog2.php
    Je ne connais pas, mais j'imagine que ça doit être fiable Sinon, il existe aussi celui-ci.

    Citation Envoyé par lhpp Voir le message
    Comment est ce que je peux savoir s'il a bien été encodé sachant qu'il en devient illisible?
    L'encodage base64 n'est pas très compliqué. Tu peux regarder sur les premiers octets si c'est cohérent. Tu peux vérifier qu'il n'y a que des caractères autorisés. Enfin, tu peux vérifier que les '=' éventuellement positionnés le sont à bon escients.
    Citation Envoyé par lhpp Voir le message
    A la réception, le fichier pdf fait 400 Octets (il en faisait 11kO au départ)
    Là, il y a un problème. La taille d'arrivée doit être égale à la taille de départ, sinon c'est qu'il manque des bouts. Dans le header donné dans le post, tu positionnes l'extension 'txt': normalement, ça ne devrait pas jouer mais méfions nous du client et positionnes 'pdf'
    Citation Envoyé par lhpp Voir le message
    A noter que pour l'envoyer, je l'encode donc en base64 puis je le lis tel un fichier texte (fopen, fread) et j'envoie tous les caractères que je lis.
    fichier texte?

  6. #6
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    Merci 3DArchi de tes réponses détaillées. Je vais apporter un peu de précisions.

    Concernant l'encodage base64, effectivement, ca semble plutot correct (pas de caractères bizzare). Pour les "=" bien positionné, j'ai pas très bien compris ta remarque.


    Le code que j'ai donné dans mon entête est en effet un peu erronné. Ce que je donne en paramètre est bien "D:\\fichier.pdf" et "fichier.pdf"


    Concernant la lecture du fichier, je m'explique : a la fin de l'entête, juste avant le "--separateur--\r\n", il faut envoyer le contenu du fichier encodé (la suite de tous les caractères constituant le fichier).
    Dans mon programme, j'ai une méthode qui renvoie une variable de type char*. Cette variable est remplie de la façon suivante : je fais un fopen du fichier pdf encodé et des fread pour lire tous les caractères que je concatène dans la variable.

    Dans l'exemple que je vous ai donné, j'ai simplement ouvert un fichier encodé avec notepad++ et j'ai directement collé son contenu.


    Dernière précision, je remarque que la taille du fichier encodé avant émission est la même que celle du fichier reçu qui aurait du être décodé(environ 400 octets)... la taille du fichier d'origine étant de 11Ko

  7. #7
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par lhpp Voir le message
    Pour les "=" bien positionné, j'ai pas très bien compris ta remarque.
    Taille de ton fichier source % 3: si 0 OK, si 1 alors deux caractères '=' doivent terminer les données, si 2 alors 1 seul caractère '='.
    Citation Envoyé par lhpp Voir le message
    Dernière précision, je remarque que la taille du fichier encodé avant émission est la même que celle du fichier reçu qui aurait du être décodé... (la taille du fichier d'origine étant de 11ko)
    Ce serait que le décodage ne s'est pas fait alors? Si côté client, tu récupère les données encodées, tu les mets dans un fichier et tu les décodes. Tu obtiens un fichier pdf correct?

  8. #8
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Dans le post que tu donnes, ton contenu base-64 est entouré de ". Est-ce vraiment nécessaire?

  9. #9
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    Je vais essayer d'implémenter la méthode de décodage et décoder moi meme mon fichier pour voir si je le récupère...

    Pour info, je viens d'ouvrir au notepad++ le fichier pdf que je reçois par mail et c'est tout moche (il semble avoir commencé le décodage, mais ca part vie en live).

    Voici le contenu :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    %PDF-1.4
    %Ç쏢
    6 0 obj
    <</Length 7 0 R/Filter /FlateDecode>>
    stream
    xœ*ÓÉnƒ0àû<ÅÛCˆ
    Ø@nYHTU…ú"6‘
    *hrèÛ׆@!ôԚű*


    Concernant les guillemets, je les ai retirés.

  10. #10
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    tu dois avoir de quoi décoder.

  11. #11
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    Merci 3DArchi pour ta source très intéressante. J'ai commencé par remplacé ma méthode d'encodage par celle qui se trouve dans le lien que tu viens de donner. Et miracle, ca fonctionne à la perfection. Le soucis était donc du à l'encodage.

    Je vais faire un peu de ménage dans mon code et je le place dans mon prochain post afin d'en faire profiter tout le monde.

    Merci de ton aide 3DArchi .

  12. #12
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Penses à

  13. #13
    Membre du Club
    Inscrit en
    Avril 2005
    Messages
    125
    Détails du profil
    Informations forums :
    Inscription : Avril 2005
    Messages : 125
    Points : 56
    Points
    56
    Par défaut
    Après quelques temps d'absence, comme promis, voici le code issu des différentes sources citées précédemment, permettant d'envoyer une pièce jointe. Des améliorations sont à prévoir...

    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
    221
    222
    223
    224
    225
    226
    227
    228
    229
    230
    231
    232
    233
    234
    235
    236
    237
    238
    239
    240
    241
    242
    243
    244
    245
    246
    247
    248
    249
    250
    251
    252
    253
    254
    255
    256
    257
    258
    259
    260
    261
    262
    263
    264
    265
    266
    267
    268
    269
    270
    271
    272
    273
    274
    275
    276
    277
    278
    279
    280
    281
    282
    283
    284
    285
    286
    287
    288
    289
    290
    291
    292
    293
    294
    295
    296
    297
    298
    299
    300
    301
    302
    303
    304
    305
    306
    307
    308
    309
    310
    311
    312
    313
    314
    315
    316
    317
    318
    319
    320
    321
    322
    323
    324
    325
    326
    327
    328
    329
    330
    331
    332
    333
    334
    335
    336
    337
    338
    339
    340
    341
    342
    343
     
    #include "stdafx.h"
    #include <winsock.h>
    #include <stdio.h>
    #include <ostream.h>
    #include <stdlib.h>
    #include <sys/stat.h>
     
     
    /*
    ** Erreurs possibles
    **
    */
    #define B64_SYNTAX_ERROR        1
    #define B64_FILE_ERROR          2
    #define B64_FILE_IO_ERROR       3
    #define B64_ERROR_OUT_CLOSE     4
    #define B64_LINE_SIZE_TO_MIN    5
     
    #define B64_DEF_LINE_SIZE   72
    #define B64_MIN_LINE_SIZE    4
     
    #define THIS_OPT(ac, av) (ac > 1 ? av[1][0] == '-' ? av[1][1] : 0 : 0)
     
    struct stat results;
     
    /*
    ** Translation Table as described in RFC1113
    */
    static const char cb64[]="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
     
    SOCKET to_server_socket = 0;
    char   server_name[]    = "SERVEUR"; // Changer SERVEUR par le nom du serveur
    int    port             = 25;
     
     
    //Recopie les valeurs de "source" dans "destination"
    void bcopy( void * source, void * destination, int size )
    {
       char * src = ( char * ) source;
       char * dst = ( char * ) destination;
     
       for( int i=0; i<size; i++ )
          dst[i] = src[i];
    }
     
     
    //Remise à zéro de "destination"
    void bzero( void * destination, int size )
    {
       char * dst = ( char * ) destination;
     
       for( int i=0; i<size; i++ )
          dst[i] = 0x00;
    }
     
     
    //Envoie l'information contenue dans "buffer" par le socket 
    void Process( char * buffer )
    {
       Sleep( 1000 );
       cerr << "Envoye   < " << buffer << endl;
       int    size   = strlen( buffer );
       int    retVal = send( to_server_socket, buffer, size, 0 );
     
       char buf[ 1024 ];
       buf[0] = 0x00;
       while( !buf[0] )
          int yeah = recv( to_server_socket, buf, 1024, 0 );
       cerr << "Recu     > " << buf << endl << endl;
    }
     
    //Lecture du fichier encodé pour l'envoyer dans le message
    void litFichierEncode( char *strFichier, char* strFichierLu) 
    {	
    	FILE *stream;
    	char list[2];
    	strcpy(strFichierLu,"");
    	strcpy(list,"");
    	int  i;
     
       if( (stream = fopen( strFichier, "r" )) != NULL )
       {
    	   while ( ( i = fread( list, sizeof(char), 1, stream ) ) > 0 ) 
    	   {
    			list[0];			
    			list[1]='\0';			
    		   strcat(strFichierLu,list);
    	   }
          fclose( stream );
       }
       else
          printf( "File could not be opened\n" );
    }
     
     
    //Encodeur block par block
    void encodeblock( unsigned char in[3], unsigned char out[4], int len )
    {
        out[0] = cb64[ in[0] >> 2 ];
        out[1] = cb64[ ((in[0] & 0x03) << 4) | ((in[1] & 0xf0) >> 4) ];
        out[2] = (unsigned char) (len > 1 ? cb64[ ((in[1] & 0x0f) << 2) | ((in[2] & 0xc0) >> 6) ] : '=');
        out[3] = (unsigned char) (len > 2 ? cb64[ in[2] & 0x3f ] : '=');
    }
     
     
    //Encodeur base 64
    void encode( FILE *infile, FILE *outfile, int linesize )
    {
        unsigned char in[3], out[4];
        int iCpt, len, blocksout = 0;
     
        while( !feof( infile ) ) 
    	{
            len = 0;
            for( iCpt = 0; iCpt < 3; iCpt++ ) 
    		{
                in[iCpt] = (unsigned char) getc( infile );
                if( !feof( infile ) ) 
    			{
                    len++;
                }
                else {
                    in[iCpt] = 0;
                }
            }
            if( len ) {
                encodeblock( in, out, len );
                for( iCpt = 0; iCpt < 4; iCpt++ ) {
                    putc( out[iCpt], outfile );
                }
                blocksout++;
            }
            if( blocksout >= (linesize/4) || feof( infile ) ) {
                if( blocksout ) {
                    fprintf( outfile, "\r\n" );
                }
                blocksout = 0;
            }
        }
    }
     
    //Gestion des messages d'erreur de l'encodeur base 64
    char *b64_message( int errcode )
    {
        #define B64_MAX_MESSAGES 6
        char *msgs[ B64_MAX_MESSAGES ] = {
                "b64:000:Invalid Message Code.",
                "b64:001:Syntax Error -- check help for usage.",
                "b64:002:File Error Opening/Creating Files.",
                "b64:003:File I/O Error -- Note: output file not removed.",
                "b64:004:Error on output file close.",
                "b64:004:linesize set to minimum."
        };
        char *msg = msgs[ 0 ];
     
        if( errcode > 0 && errcode < B64_MAX_MESSAGES ) {
            msg = msgs[ errcode ];
        }
     
        return( msg );
    }
     
    //Encodeur base 64. Ouvre le fichier d'origine, créé un fichier encodé
    int b64( char *infilename, char *outfilename, int linesize )
    {
        FILE *infile;
        int retcode = B64_FILE_ERROR;
     
        if( !infilename ) 
    	{
            infile = stdin;
        }
        else 
    	{
            infile = fopen( infilename, "rb" );
        }
        if( !infile ) 
    	{
            perror( infilename );
        }
        else 
    	{
            FILE *outfile;
            if( !outfilename ) 
    		{
                outfile = stdout;
            }
            else 
    		{
                outfile = fopen( outfilename, "wb" );
            }
            if( !outfile ) 
    		{
                perror( outfilename );
            }
            else 
    		{
                encode( infile, outfile, linesize );
     
    			if (ferror( infile ) || ferror( outfile )) 
    			{
                    retcode = B64_FILE_IO_ERROR;
                }
                else 
    			{
                     retcode = 0;
                }
                if( outfile != stdout ) 
    			{
                    if( fclose( outfile ) != 0 ) 
    				{
                        perror( b64_message( B64_ERROR_OUT_CLOSE ) );
                        retcode = B64_FILE_IO_ERROR;
                    }
                }
            }
            if( infile != stdin ) 
    		{
                fclose( infile );
            }
        }
        return( retcode );
    }
     
     
     
     
    //Fonction principale (les arguments sont inutiles dans cet exemple)
    int main( int argc, char *argv[] )
    {
       int           not            = 0;
       unsigned long ioctl_blocking = 1;
     
    	char* strFichierOrigine = "chemin_de_mon_fichier_a_envoyer"; // Remplacer par le fichier à envoyer (exemple : C:\\toto.txt)
    	char* strFichierName = "mon_fichier_a_envoyer"; //remplacer par le nom (pas le chemin) temporaire du fichier encodé en base 64
     (par exemple totoEncode.txt)
     
    	int linesize = B64_DEF_LINE_SIZE;
    	char* strFichierEncode = "chemin_de_mon_fichier_encodé"; //Remplacer par le chemin du fichier temporaire du fichier encodé en base 64 (par exemple C:\totoEncode.txt)
     	b64( strFichierOrigine, strFichierEncode, linesize );
     
    	int iTailleFichier = 0;
       	if (stat(strFichierEncode, &results) == 0)
    	{
    		iTailleFichier = results.st_size;
    	}
    	else
    	{
    		//TESTER LES ERREURS ET LES LOGGER
    	}
     
    	char *fichierEncode;
    	fichierEncode = (char*) malloc (iTailleFichier+1);
    	litFichierEncode( strFichierEncode,fichierEncode) ;
     
    	char *ligneMime;
    	ligneMime = (char*) malloc (iTailleFichier+1000);
    	strcpy(ligneMime,"MIME-Version: 1.0\r\nContent-Type: multipart/mixed; boundary=\"separateur\"\r\n\r\n--separateur\r\nContent-Type: text/plain;charset=\"us-ascii\"\r\nContent-Transfer-Encoding: 7bit\r\n\r\nUn petit mail avec pièce jointe envoyé par l'appli.\r\n\r\n--separateur\r\nContent-Type: application/pdf;nname=\"");
    	strcat(ligneMime,strFichierOrigine);
    	strcat(ligneMime,"\"\r\nContent-Transfer-Encoding: base64\r\nContent-Disposition: attachment;filename=\"");
    	strcat(ligneMime,strFichierName);
    	strcat(ligneMime,"\"\r\n\r\n");
    	strcat(ligneMime,fichierEncode);
    	strcat(ligneMime,"--separateur--\r\n.\r\n");
     
     
       WSADATA wsaData;
       if( int err = WSAStartup( 0x0101, &wsaData ) )
       {
          cerr << "WSAStartup failed... Error: " << err << endl;
          exit( -1 );
       }
     
     
       struct sockaddr_in   serverSockAddr;    // addresse de la socket
       struct hostent     * serverHostEnt;     // description du host serveur
       long                 hostAddr;          // addr du serveur
     
       bzero( &serverSockAddr, sizeof( serverSockAddr ) );
       // converti l'adresse ip du serveur en entier long
       hostAddr = inet_addr( server_name );
     
       if( ( long ) hostAddr != ( long ) -1 )
          bcopy( &hostAddr, &serverSockAddr.sin_addr, sizeof( hostAddr ) );
       else               // si on a donne un nom
       {
          serverHostEnt = gethostbyname( server_name );
          if ( serverHostEnt == NULL )
          {
             cerr << "pb gethost" << endl;
             exit( 0 );
          }
          bcopy( serverHostEnt->h_addr, &serverSockAddr.sin_addr,
                 serverHostEnt->h_length );
       }
     
       serverSockAddr.sin_port = htons( port );         // host to network port
       serverSockAddr.sin_family = AF_INET;             // AF_*** : INET=internet
       // creation de la socket
     
       to_server_socket = socket( AF_INET, SOCK_STREAM, 0 );
       if ( to_server_socket < 0)
       {
          cerr << "pb creation socket client" << endl;
          exit( 0 );
       }
     
       setsockopt(to_server_socket, SOL_SOCKET, SO_DONTLINGER, (char *) &not,
                  sizeof(not));
     
     
       // requete de connexion
       if( connect( to_server_socket, ( struct sockaddr * ) &serverSockAddr,
                                          sizeof( serverSockAddr ) ) < 0 )
       {
          cerr << "pb demande de connection" << endl;
          exit( 0 );
       }
     
       ioctlsocket ( to_server_socket, FIONBIO, &ioctl_blocking );
     
       char buf[ 1024 ];
       buf[0] = 0x00;
       while( !buf[0] )
          int yeah = recv( to_server_socket, buf, 1024, 0 );
       cerr << "Receive > " << buf << endl << endl;
     
       Process( "EHLO logAlia\r\n" );
       Process( "MAIL From:<mon_adresse@mon_FAI>\r\n" ); //Remplacer par sa propre adresse mail
       Process( "RCPT To:<mon_destinataire@son_FAI>\r\n"); //Remplacer par l'adresse mail du destinataire. Si plusieurs destinataires, dupliquer la ligne entiere. (Process( "RCPT To:<mon_destinataire2@son_FAI>\r\n"); 
       Process( "DATA\r\n" );
       Process(ligneMime);
       Process( "QUIT\r\n" );
     
     
       free (fichierEncode);
     
       /* fermeture de la connection */
       shutdown( to_server_socket, 2 );
     
       return( closesocket( to_server_socket ) );
    }

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

Discussions similaires

  1. [OL-2010] Importation adresses mails a partir d'une piece jointe
    Par asgro dans le forum Outlook
    Réponses: 2
    Dernier message: 05/01/2015, 12h35
  2. envoie mail word en html sans piece jointe
    Par Pexou dans le forum VBA Word
    Réponses: 1
    Dernier message: 21/11/2013, 20h22
  3. [WD17] envoie d'un email avec en piece jointe le pdf de l'état
    Par davcaz dans le forum WinDev
    Réponses: 3
    Dernier message: 15/01/2013, 11h07
  4. [Acces piece jointe] modifier pdf
    Par HeB91 dans le forum SharePoint
    Réponses: 19
    Dernier message: 14/01/2010, 17h14
  5. Piece jointe pour un e-mail
    Par Michel DELAVAL dans le forum Access
    Réponses: 1
    Dernier message: 23/06/2006, 09h38

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