Неавторизованная отправка почты. В данном примере хочу Вам показать, как использовать неавторизованную отправку почты, то есть владелец электронного почтового ящика получает письмо от себя. Хочу сразу предупредить, что такой способ используют спамеры и это чревато проблемами с законодательством.
Ну а теперь приступим к созданию программы. Для этого использовалась среда Microsoft Visual C++ 6.0, ну и естественно необходим адрес сервера где возможна такая отправка почты. На момент написания данного примера у меня имелся адрес хоста где это было возможно реализовать, для нахождения таких серверов вы можете использовать различные сетевые сканеры, коих много в интернете.
#include <iostream.h> #include <stdio.h> #include <windows.h> #pragma comment(lib, "ws2_32.lib") int main() { WSADATA wsaData; if(!WSAStartup(0x0202,&wsaData)) { cout<<"WSAStartup is ok"<<endl; const char message [] = "Date: 1 April 2007 10.10.10\r\n \ From: lazy_elf@list.ru\r\nTo:lazy_elf@list.ru\r\n \ Subject: Hacked \r\n Lazy_elf\r\n"; SOCKET s_smtp = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP); if(s_smtp != SOCKET_ERROR) { cout<<"socket is ok"<<endl; sockaddr_in addr_smtp; addr_smtp.sin_family = AF_INET; addr_smtp.sin_port = htons(25); addr_smtp.sin_addr.s_addr = inet_addr("*.*.*.*"); char status[1024];memset(status,0,sizeof(status)); if(connect(s_smtp,(PSOCKADDR)&addr_smtp,sizeof(addr_smtp)) != SOCKET_ERROR) { cout<<"connect is ok"<<endl; int ires = recv(s_smtp,status,1024,0); if(ires != SOCKET_ERROR) { memset(status,0,sizeof(status));//проверить cout<<"recv is ok: "<<status<<endl;//**// sprintf(status,"HELO %s\r\n","list.ru"); if(send(s_smtp,status,strlen(status),0) != SOCKET_ERROR) { cout<<"send is ok"<<status<<endl;//**// ires = recv(s_smtp,status,1024,0); if(ires != SOCKET_ERROR) { cout<<"send(HELO) is ok"<<status<<endl;//**// memset(status,0,sizeof(status));//проверить sprintf(status,"MAIL FROM:<%s>\r\n","lazy_elf@list.ru"); if(send(s_smtp,status,strlen(status),0) != SOCKET_ERROR) { cout<<"send(MAIL FROM) is ok"<<status<<endl;//**// ires = recv(s_smtp,status,1024,0); if(ires != SOCKET_ERROR) { cout<<"recv(MAIL FROM) is ok"<<status<<endl;//**// memset(status,0,sizeof(status));//проверить sprintf(status,"RCPT TO:<%s>\r\n","lazy_elf@list.ru"); if(send(s_smtp,status,strlen(status),0) != SOCKET_ERROR) { cout<<"send(RCPT TO) is ok"<<status<<endl;//**// //!!!error ires = recv(s_smtp,status,1024,0); if(ires != SOCKET_ERROR) { cout<<"recv Test (RCPT TO) - "<<status<<endl;//**// memset(status,0,sizeof(status));//проверить sprintf(status,"DATA\r\n"); send(s_smtp,status,strlen(status),0);//! ires = recv(s_smtp,status,1024,0); if(ires != SOCKET_ERROR) { cout<<"recv(DATA) is ok"<<status<<endl;//*!*// //!!!error sprintf(status,"%s\r\n.\r\n",message); send(s_smtp,status,strlen(status),0);//! ires = recv(s_smtp,status,1024,0); if(ires != SOCKET_ERROR) { cout<<"recv(message) is ok"<<status<<endl;//**// sprintf(status,"QUIT\r\n"); send(s_smtp,status,strlen(status),0);//! ires = recv(s_smtp,status,1024,0); if(ires != SOCKET_ERROR) { cout<<"sending mail successfully"<<status<<endl;//**// }else{cout<<"ERROR recv(QUIT)"<<endl;} }else{cout<<"ERROR recv(message)"<<endl;} }else{cout<<"ERROR recv(DATA)"<<endl;} }else{cout<<"ERROR recv(RCPT TO)"<<endl;} }else{cout<<"ERROR send(RCPT TO)"<<endl;} }else{cout<<"ERROR recv(MAIL FROM)"<<endl;} }else{cout<<"ERROR send(MAIL FROM)"<<endl;} }else{cout<<"ERROR send(HELO)"<<endl;} }else{cout<<"ERROR send"<<endl;} }else{cout<<"ERROR recv"<<endl;} }else{cout<<"ERROR connect"<<endl;} closesocket(s_smtp); }else{cout<<"ERROR socket"<<endl;} if(!WSACleanup()){cout<<"WSACleanup is ok"<<endl;}else{cout<<"ERROR WSACleanup"<<endl;} }else{cout<<"ERROR WSAStartup"<<endl;} return 0; }