Перейти к содержимому

Неавторизованная отправка почты

Неавторизованная отправка почты. В данном примере хочу Вам показать, как использовать неавторизованную отправку почты, то есть владелец электронного почтового ящика получает письмо от себя. Хочу сразу предупредить, что такой способ используют спамеры и это чревато проблемами с законодательством.

Ну а теперь приступим к созданию программы. Для этого использовалась среда 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;
}
Метки: