0/5 (36 avis)
Snippet vu 17 345 fois - Téléchargée 38 fois
#include <winsock.h> #include <iostream.h> #include <string.h> SOCKET to_server_socket = 0; char server_name[100]; int port = 25; char destinataire[120] = "RCPT To: <"; char sender[120] = "MAIL From: <"; char exp[100], 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 ); 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; } int main( int argc, char *argv[] ) { int not = 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>>exp; 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,exp); 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 ) ) { 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 ) ); // 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 ) { cerr << "echec 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 << "echec creation socket client" << endl; exit( 0 ); } setsockopt(to_server_socket, SOL_SOCKET, SO_DONTLINGER, (char *) ¬, sizeof(not)); // requete de connexion if( connect( to_server_socket, ( struct sockaddr * ) &serverSockAddr, sizeof( serverSockAddr ) ) < 0 ) { cerr << "echec 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 Toto\r\n" ); Process( sender ); // mail de l'expediteur 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 ) ); }
21 juin 2002 à 19:42
Juste quelques petites remarques:
Au lieu d'utiliser tes fonctions bcopy et bzero, tu peux utiliser memcpy et memset :
void *memcpy( void *dest, const void *src, int count );
void *memset( void *dest, int val, int count );
D'autre part, si tu veux pouvoir saisir le corps du message avec plusieurs lignes, je te conseille d'utiliser cin.getline à la place de cin sous la forme :
cin.getline(message, 1000, '$');
Le délimiteur est alors le caractère $ et non plus
(le premier Process, c'est HELO BobSender...)
Sinon, c'est un super prog.
22 juin 2002 à 02:47
22 juin 2002 à 10:16
Au delà, c'est tronqué.
17 oct. 2002 à 12:55
Compiling...
smtp.cpp
Linking...
smtp.obj : error LNK2001: unresolved external symbol __imp__recv@16
smtp.obj : error LNK2001: unresolved external symbol __imp__send@16
smtp.obj : error LNK2001: unresolved external symbol __imp__closesocket@4
smtp.obj : error LNK2001: unresolved external symbol __imp__shutdown@8
smtp.obj : error LNK2001: unresolved external symbol __imp__ioctlsocket@12
smtp.obj : error LNK2001: unresolved external symbol __imp__connect@12
smtp.obj : error LNK2001: unresolved external symbol __imp__setsockopt@20
smtp.obj : error LNK2001: unresolved external symbol __imp__socket@12
smtp.obj : error LNK2001: unresolved external symbol __imp__htons@4
smtp.obj : error LNK2001: unresolved external symbol __imp__gethostbyname@4
smtp.obj : error LNK2001: unresolved external symbol __imp__inet_addr@4
smtp.obj : error LNK2001: unresolved external symbol __imp__WSAStartup@8
18 oct. 2002 à 16:14
t'a pas du lire la petite ligne en bas (moi o6 je me suis fé avoir) :
ATTENTION dans settings du projet / link ajouter : ws2_32.lib sinon ca marche pas
Je l'ai testé et ça marche nikel !
Pas besoin de modifier la source, juste la copier et la compiler et ça marche
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.