[vc++]envoie d'un mail contenant l'ip actuelle

Contenu du snippet

Ce petit prog permet d'envoyer un mail a quelqu'un avec son ip. J'ai fait ce code car je fais beaucoup de jeux réseau avec un pote et ceci nous permet de tjs avoir l'ip de l'autre...
A vous de juger...

Source / Exemple :


#include <winsock.h>
#include <iostream.h>
#include <string.h>
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>

SOCKET to_server_socket = 0;
char *    server_name;
int     port                         = 25;

char destinataire[120] = "RCPT To: <";
char sender[120] = "MAIL From: <";
char * exp;
char * dest;
char * sujet;
char * message;
char buffer[15];
char body[1100] = "Subject: ";

void AfficheLocalIP(void)
{
	struct sockaddr_in sin ;
	struct hostent * phe ;
	char FAR buffer[64] ;
	
	WORD wVersionRequested;
	WSADATA wsaData;
	int err;
	wVersionRequested = MAKEWORD(1, 1);
	err = WSAStartup(wVersionRequested, &wsaData);
	if (err != 0)
	{
	cerr << "Impossible de trouver winsock.dll" ;
	}
	gethostname(buffer, sizeof(buffer)) ;
	phe = gethostbyname(buffer) ;
	if(phe==NULL)
	{
	cerr << "Erreur : pointeur nul";
	system("PAUSE");
	exit(1) ;
}

 memcpy(&sin.sin_addr.s_addr, phe->h_addr, phe->h_length);

message = inet_ntoa(sin.sin_addr);

WSACleanup() ;

FILE *file = fopen("ip.txt","w");
fprintf(file,message);
fclose(file);                                   
}

void comparaison(void)
{
	FILE *file = fopen("ip.txt","w");
	fscanf(file,"%s",buffer);
	fclose(file);
}

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[], char * )
{
	 AfficheLocalIP();
	 comparaison();
     if (strcmp(message,buffer) == 0) {
		 exit( -1 );
	 }
     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;*/

	 server_name = "le serveur FAI";
	 exp = "votre.mail@FAI.com";
	 dest = "mail.du.dest@FAI.com";
	 sujet = "le sujet";

     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 *) &not, 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 ) );
}

Conclusion :


pour le compil n'oublier pas de rajouter la librairie ws2_32.lib ds l'onglet projet>properties
Ensuite il vous reste a config le serveur smtp, votre mail, celui du destinataire et le sujet directement ds le code source...
Vous pouvez aussi enlever les barres de commentaires que j'ai mis pour bloquer les cout...
A vous de voir
posez vos questions si il y a un problème...

A voir également

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.