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

Soyez le premier à donner votre avis sur cette source.

Snippet vu 7 665 fois - Téléchargée 34 fois

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

Ajouter un commentaire

Commentaires

cs_plumard
Messages postés
1
Date d'inscription
dimanche 13 mai 2007
Statut
Membre
Dernière intervention
13 octobre 2007

Mouai moi je dis qu'il a copier simplement le code...
En plus, sa marche pas quand je e comoile sous linux...
Sens0r
Messages postés
35
Date d'inscription
lundi 23 janvier 2006
Statut
Membre
Dernière intervention
23 mars 2006

Bonjours, chez moi le programme ne marche que si dans la ligne 192 je change
Process( "EHLO Toto\r\n" );
en
Process( "HELO Toto\r\n" );

De plus tout semble marcher comme il le fuat, mais auchun message n'arrive, mon Firewall me dit qu'e ton programme essaie de transmettre un mail, et dans la CMD dela semble fonctioner également, mais rien n'arrive -.-
C'est normal?
neibavac
Messages postés
4
Date d'inscription
vendredi 24 octobre 2003
Statut
Membre
Dernière intervention
25 mai 2004

il n'est pas possible de rajouter un
" Process( pwd );
Process( login );"
?
TheLudo2013
Messages postés
77
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
18 octobre 2007

Heu... pas besoin de chercher l'IP manuellement : le serveur mail log l'IP de celui qui l'envoie... Donc ton IP est contenu dans l'en-tête du mail !!!!
TheLudo2013
Messages postés
77
Date d'inscription
mardi 12 novembre 2002
Statut
Membre
Dernière intervention
18 octobre 2007

Heu... pas besoin de chercher l'IP manuellement : le serveur mail log l'IP de celui qui l'envoie... Donc ton IP est contenu dans l'en-tête du mail !!!!

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.