PDA

View Full Version : [C] utilizzare il protocollo SMTP


vici_1
04-03-2004, 23:25
mi connetto al server di posta e mi ricosce, ma i comandi dopo HELO vengono rifiutati


ecco la risposta dal server :

Server echoed1 '220 vsmtp3.tin.it ESMTP Service (7.0.019) ready
'
Server echoed2 '250-vsmtp3.tin.it Missing required domain name in EHLO, defaulte
d to your IP address [80.107.21.103]
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 29999104
'
Server echoed3 '500 command unrecognized
equired domain name in EHLO, defaulted to your IP address [80.107.21.103]
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 29999104
'
Server echoed4 '500 command unrecognized
equired domain name in EHLO, defaulted to your IP address [80.107.21.103]
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 29999104
'
Sending 'Connection Closing' command




Questo e' il pezzo del sorgente :

#define MESHELO "ehlo\r\n\0"
#define MESQUIT "QUIT\r\n\0"
#define MESHELP "HELP\r\n\0"
#define MESNOOP "NOOP\r\n\0"
...
int main(int argc, char *argv[])
{
if ( argc < 2 ) Usage();

if (strcmp(argv[1], "client") == 0 )
{
// initialize wsock32.dll, requesting winsock 1.1
if (argc!=3 ) Usage();
if (!InitializeWinsock (MAKEWORD(1,1) ) ) return 1;
client(argv[2]);
WSACleanup();
}
return 0;
}

void client(char * server_IP)
{
SOCKET fd; // "file" descriptor for the network socket
SOCKADDR_IN saddr;
char buf[MAX_STRING];

struct hostent *h;

if ((h=gethostbyname(server_IP)) == NULL) { /* get the host info */
error("gethostbyname");
exit(1);
}
printf("Host name : %s\n", h->h_name);
printf("IP Address : %s\n\n",inet_ntoa(*((struct in_addr *)h->h_addr)));

if ((fd=socket(AF_INET,SOCK_STREAM,0)) == INVALID_SOCKET)
error("Client: socket not connected ");

saddr.sin_family = AF_INET;
saddr.sin_addr.s_addr = inet_addr(inet_ntoa(*((struct in_addr *)h->h_addr)));
saddr.sin_port = htons(PORT);

// request connection to server socket (remote machine)
if (connect(fd, (LPSOCKADDR) &saddr, sizeof(saddr)) == SOCKET_ERROR)
error("Client: connect ");

if( recv(fd, buf, sizeof(buf), 0) == SOCKET_ERROR )
error("Client: receiving failure ");

printf("Server echoed1 '%s' \n",buf);

if( send(fd, MESHELO, strlen(MESHELO)+1, 0) == SOCKET_ERROR )
error("Server: sending failure ");

if( recv(fd, buf, sizeof(buf), 0) == SOCKET_ERROR )
error("Client: receiving failure ");

printf("Server echoed2 '%s' \n",buf);
//----
if( send(fd, MESHELP, strlen(MESHELP)+1, 0) == SOCKET_ERROR )
error("Server: sending failure ");

if( recv(fd, buf, sizeof(buf), 0) == SOCKET_ERROR )
error("Client: receiving failure ");

printf("Server echoed3 '%s' \n",buf);

if( send(fd, MESQUIT, strlen(MESQUIT)+1, 0) == SOCKET_ERROR )
error("Server: sending failure ");

if( recv(fd, buf, sizeof(buf), 0) == SOCKET_ERROR )
error("Client: receiving failure ");

printf("Server echoed4 '%s' \n",buf);
//<<<<<
//---
printf("Sending 'Connection Closing' command\n\n");

if (closesocket(fd) == SOCKET_ERROR)
error("Client: closing socket ");
}

cionci
05-03-2004, 13:18
Prova con HELO al posto di EHLO...EHLO ha una sintassi diversa che non mi ricordo...

vici_1
05-03-2004, 22:24
Originariamente inviato da cionci
Prova con HELO al posto di EHLO...EHLO ha una sintassi diversa che non mi ricordo...
Purtroppo avevo gia' provato, ma il risultato e' stato esattamente lo stesso , solo che in risposta il server, con HELO, non mi da l'elenco dei comandi
250-DSN
250-8BITMIME
250-PIPELINING
250-HELP
250-AUTH=LOGIN
250-AUTH LOGIN CRAM-MD5 DIGEST-MD5 PLAIN
250-DELIVERBY 300
250 SIZE 29999104

come invece avviene con EHLO.

Ecco il risultato con HELO :

Host name : mail.tin.it
IP Address : 62.211.72.20

Server echoed1 '220 vsmtp3.tin.it ESMTP Service (7.0.019) ready
'
Server echoed2 '250 vsmtp3.tin.it Missing required domain name in HELO, defaulte
d to your IP address [212.161.20.165]
'
Server echoed3 '500 command unrecognized
equired domain name in HELO, defaulted to your IP address [212.161.20.165]
'
Server echoed4 '500 command unrecognized
equired domain name in HELO, defaulted to your IP address [212.161.20.165]
'
Sending 'Connection Closing' command

cionci
05-03-2004, 22:30
Scrivi HELO seguito da una qualsiasi stringa...

vici_1
05-03-2004, 22:53
Ho provato cosi' e in effetti qualche cosa e' cambiata

#define MESHELO "HELO ciao\r\n\0"


Risposta


Host name : mail.tin.it
IP Address : 62.211.72.20

Server echoed1 '220 vsmtp4.tin.it ESMTP Service (7.0.019) ready
'
Server echoed2 '250 vsmtp4.tin.it
SMTP Service (7.0.019) ready
'
Server echoed3 '500 command unrecognized
vice (7.0.019) ready
'
Server echoed4 '500 command unrecognized
vice (7.0.019) ready
'
Sending 'Connection Closing' command