SMTP in action

>> Wednesday, October 14, 2009


Check here for description of SMTP protocol. Here's a translation into socket programming codes.

Suppose



#include "windows.h"
#include "winsock.h"
#include "stdio.h"
#pragma comment(lib,"WS2_32")

WSADATA ws;
SOCKET s;
struct sockaddr_in addr;
hostent *d_addr;
char text[1024];

int main()
{
WSAStartup(MAKEWORD(1,1), &ws);
s = socket(AF_INET,SOCK_STREAM, 0);
d_addr = gethostbyname("smtp.mail.ru");
addr.sin_family = AF_INET;
addr.sin_addr.s_addr = *((unsigned long *)d_addr->h_addr);
addr.sin_port = htons(25);
connect(s,(sockaddr*)&addr,sizeof(addr));

recv(s,text,sizeof(text), 0);
printf("recv - %s", text);

strcpy(text,"HELO smtp.mail.ru\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

recv(s,text,sizeof(text),0);
printf("send - %s", text);

strcpy(text,"MAIL FROM: sender@gmail.ru\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

recv(s,text,sizeof(text),0);
printf("recv - %s", text);

strcpy(text,"RCPT TO: receiver@hotmail.com\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

strcpy(text,"DATA\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

recv(s,text,sizeof(text),0);
printf("recv - %s", text);

strcpy(text,"FROM: sender@mail.ru\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

strcpy(text,"TO: receiver@hotmail.com\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

strcpy(text,"SUBJECT: test\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

strcpy(text,"Hi!\nIt is a message for you\n");
send(s,text,strlen(text),0);
printf("send - %s", text);

strcpy(text,"\r\n.\r\n");
send(s,text,strlen(text),0);
printf("send - %s", text);
recv(s,text,sizeof(text),0);
printf("recv - %s", text);


strcpy(text,"QUIT");
send(s,text,strlen(text),0);
printf("send - %s", text);


closesocket(s);

return 0;


}


0 comments: