Mail avec pièce jointe

Signaler
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
-
Voilà j'ai trouvé dans une source le code que j'ai un peu modifié pour dev-c++ et je voudrais savoir ce qu'il faut rajoutter pour une pièce jointe.

#include 
#include <string.h>
using namespace std;

SOCKET to_server_socket = 0;
char     server_name[100];
int port             = 25;

char destinataire[120] = "RCPT To: <";
char sender[120] = "MAIL From: <";
char expe[100];char dest[100];
char sujet[50];
char message[1000];
char body[1100] = "Subject: ";

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];
}

void bzero( void * destination, int size )
{
     char * dst = ( char * ) destination;

     for( int i=0; i<size; i++ )
        dst[i] = 0x00;
}

void Process( char * buffer )
{
     Sleep( 1000 );
     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 );
}

int main( int argc, char *argv[] )
{
     int note = 0;
     unsigned long ioctl_blocking = 1;

     cout<<"Entrez le nom du serveur smtp ou son ip\n";
     cin>>server_name;
     cout<<"Entrez l'adresse email de l'expediteur\n";
     cin>>expe;
     cout<<"\nEntrez l'adresse email du destinataire\n";
     cin>>dest;
     cout<<"\nEntrez le sujet du mail\n";
     cin>>sujet;
     cout<<"\nEntrez votre message\n";
     cin>>message;

     strcat(sender,expe);
     strcat(sender,">\r\n");
     strcat(destinataire,dest);
     strcat(destinataire,">\r\n");
     strcat(body,sujet);
     strcat(body," \r\n\r\n ");
     strcat(body,message);
     strcat(body," \r\n.\r\n");

     WSADATA wsaData;
     if( int err = WSAStartup( 0x0101, &wsaData ) )
     {
        MessageBox(NULL,"Vous devez être connecté en même temps à Internet !!\r\nSi vous l'êtes déjà regardez avec votre pare-feu","Erreur !!!",MB_OK|MB_ICONERROR);
        exit(0);
     }

     struct sockaddr_in  serverSockAddr;    // addresse de la socket
     struct hostent  * serverHostEnt;    // description du host serveur
     long                hostAddr;          // addr du serveur

     bzero( &serverSockAddr, sizeof( serverSockAddr ) );     // initialise a zero serverSockAddr
     // converti l'adresse ip 9.100.1.1 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 )
        {
         MessageBox(NULL,"Erreur 1","Erreur !!!",MB_OK|MB_ICONERROR);
        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)
     {
       MessageBox(NULL,"Erreur 2","Erreur !!!",MB_OK|MB_ICONERROR);
        exit(0);
     }

     setsockopt(to_server_socket, SOL_SOCKET, SO_DONTLINGER, (char *) &note, sizeof(note));

     // requete de connexion
     if( connect( to_server_socket, ( struct sockaddr * ) &serverSockAddr, 
                                        sizeof( serverSockAddr ) ) < 0 )
     {
       MessageBox(NULL,"Erreur 3","Erreur !!!",MB_OK|MB_ICONERROR);
        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 );

     Process( "EHLO Toto\r\n" );
     Process( sender );  // mail de l'expeediteur
     Process( destinataire );    // mail du destinataire
     Process( "DATA\r\n" );
     Process( body );
     Process( "QUIT\r\n" );

     /* fermeture de la connection */
     shutdown( to_server_socket, 2 );
     return( closesocket( to_server_socket ) );
}


Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com

7 réponses

Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
tel qu'il est ecrit, ce code ne peut envoyer que des emails simple (que du texte).

Pour envoyer des pieces jointes, il faut utiliser le protocole MIME qui permet a ton mail d'avoir plusieurs parties ("multipart mail"). Avec ca tu peux envoyer un mail en version texte, en version html, avec un ou plusieur fichier joints, etc.

Je n'ai jamais envoyé de mail avec MIME, mais il me semble que c'est assez compliqué.
Sur le net tu trouvera la RFC consacrée au protocole MIME.
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
oui mais je ne veux passer que part un smtp et être compatible avec Dev-C++

Alors si quelqu'un peut maider qu'il le dise !!!

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
MIME c'est juste pour mettre en forme ton mail. Ce n'est pas un protocol d'envoi, il faudra toujours envoyer son mail avec smtp meme s'il est en mime.

Et bien sur que c'est compatible avec devc++
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
alors est-ce que quelqu'un peut modifier code de façon MIME ?

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1905
Date d'inscription
mercredi 22 janvier 2003
Statut
Membre
Dernière intervention
17 septembre 2012
2
Salut,
faut pas exagerer non plus, c'est toi qui programme ton appli, pas les autres...
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
Ceci n'est qu'un bout de code pour moi.

Je veux un code qui réponds à mes exigences C tout.

En effet je programme mon apli mais celle là pour moi ne sera à titre d'exemple c'est à dire que je tranformerais main() en fonction.

PS : Si ça serait mon prog il serait écrit WinMain !!!

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com
Messages postés
1100
Date d'inscription
jeudi 24 avril 2003
Statut
Membre
Dernière intervention
17 octobre 2012
6
Ceci n'est qu'un bout de code pour moi.

Je veux un code qui réponds à mes exigences C tout.

En effet je programme mon apli mais celle là pour moi ne sera à titre d'exemple c'est à dire que je tranformerais main() en fonction.

PS : Si ça serait mon prog il serait écrit WinMain !!!

Vous voulez des RPG gratuits allez sur http://jeux.jscv.com !!!

Le créateur du site http://www.jscv.com