Quote:
Originariamente inviato da leon84
Da un'applicazione consolle com'č possibile inviare una mail ?
|

ti devi creare tre file mailer.ini sender.ini rcpt.ini con i rispettivi valori
Codice:
#include <winsock.h>
#include <ostream.h>
#include <stdio.h>
#include <string>
using namespace std;
SOCKET to_server_socket = 0;
//char server_name[] = "smtp.fastwebnet.it"; // Changer SERVEUR par le nom du serveur
int port = 25;
char sender[100],server_name[100],rcpt[100];
FILE* fp;
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;
fp = fopen("mailer.ini","r");
fscanf(fp,"%s",server_name);
fclose(fp);
fp = fopen("sender.ini","r");
fscanf(fp,"%s",sender);
fclose(fp);
fp = fopen("rcpt.ini","r");
fscanf(fp,"%s",rcpt);
fclose(fp);
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
hostAddr = inet_addr( server_name );
// converti l'adresse ip 9.100.1.1 en entier long
// if( ( long ) hostAddr != ( long ) -1 )
// bcopy( &hostAddr, &serverSockAddr.sin_addr, sizeof( hostAddr ) );
//else // si on a donne un nom
//{
serverHostEnt=NULL;
while(!serverHostEnt)
{
serverHostEnt = gethostbyname( server_name );
if ( serverHostEnt == NULL )
{
cerr << "ca chie gethost" << endl;
//exit( 0 );
}
else cout<<"CONNESSO!";
//Sleep(10000);
}
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
while (true)
{
to_server_socket = socket( AF_INET, SOCK_STREAM, 0 );
if ( to_server_socket < 0)
{
cerr << "ca chie 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 << "ca chie 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( "HELO helio_denis\r\n" );
string a1="MAIL From: <";
a1 += sender;
a1 += ">\r\n";
char * aux1=new char[a1.length()];
for (int h=0;h<a1.length();h++)
aux1[h]=a1[h];
aux1[h]='\0';
Process( aux1); // Changer ADD FROM par le mail de l'expediteur
//delete aux1;
a1="RCPT To: <";
a1 += rcpt;
a1 += ">\r\n";
aux1=new char[a1.length()];
for (h=0;h<a1.length();h++)
aux1[h]=a1[h];
aux1[h]='\0';
Process( aux1); // Changer ADD FROM par le mail de l'expediteur
//delete aux1;
Process( "DATA\r\n" );
a1="From: ";
a1+=sender;
a1+="\r\nTo: ";
a1+=rcpt;
a1+="\r\nSubject: IP di ";
a1+=sender;
a1+="\r\n\r\n";
a1+="\r\n.\r\n";
aux1=new char[a1.length()];
for (h=0;h<a1.length();h++)
aux1[h]=a1[h];
aux1[h]='\0';
Process( aux1);
Process( "QUIT\r\n" );
//shutdown( to_server_socket, 2 );
closesocket( to_server_socket );
}
return( closesocket( to_server_socket ) );
}