· 9 years ago · Apr 09, 2017, 09:30 PM
1#include <WinSock2.h>
2#include <Windows.h>
3#include <stdio.h>
4#include <Windns.h>
5#include <Ws2tcpip.h>
6
7#pragma comment(lib, "Dnsapi")
8#pragma comment(lib, "ws2_32")
9INT InitializeWINSOCK();
10
11const char* SMTPSERVER = "gmail-smtp-in.l.google.com";
12const WORD SMTPPORT = 25;
13SOCKET Connect(const char * HostName, const char * Port);
14
15int main()
16{
17 DNS_RECORD *pQueryResults, *pQueryRec;
18 ULONG Error =0;
19 char Domain[] = "gmail.com";
20
21 if (ERROR_SUCCESS != DnsQuery_A(Domain,DNS_TYPE_MX,DNS_QUERY_STANDARD,NULL,&pQueryResults,NULL))
22 {
23 printf("Failed to dns lookup\n");
24 return 1;
25 }
26
27 pQueryRec = pQueryResults;
28 while(pQueryRec)
29 {
30 if (pQueryRec->wType == DNS_TYPE_MX)
31 {
32 printf("%s\n", pQueryRec->Data.MX.pNameExchange);
33 }
34 pQueryRec = pQueryRec->pNext;
35 }
36
37
38 Connect(SMTPSERVER,"25");
39
40 printf("Done\n");
41 fgetc(stdin);
42
43 return 0;
44}
45
46INT InitializeWINSOCK()
47{
48 WSADATA DATA = {0};
49 return WSAStartup(MAKEWORD(2,2),&DATA) ? 0 : 1;
50}
51
52#define DEFAULT_BUFLEN 512
53
54SOCKET Connect(const char * HostName, const char * Port)
55{
56
57 WSADATA WsDt;
58 WSAStartup(MAKEWORD(2,2),&WsDt);
59 SOCKET Sk = socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
60 sockaddr_in SkDt;
61 ZeroMemory((char*)&SkDt,sizeof(sockaddr_in));
62 SkDt.sin_port = htons(25);
63 SkDt.sin_addr.S_un.S_addr = inet_addr("74.125.206.26");
64 SkDt.sin_family = AF_INET;
65 char RecvData[512];
66 ZeroMemory(RecvData,512);
67
68 if(connect(Sk,(const sockaddr*)&SkDt,sizeof(sockaddr_in)) == -1)
69 {
70 MessageBoxA(0,"Cant",0,0);
71 }
72 if(recv(Sk,RecvData,512,0) != -1)
73 {
74 int a = 0;
75 printf("%s\n", RecvData);
76 send(Sk, "HELO local.doman.name\r\n", strlen("HELO local.doman.name\r\n"), 0);
77 a = recv(Sk, RecvData, 512, 0);
78 RecvData[a] = 0;
79 printf("%s\n", RecvData);
80 send(Sk, "MAIL FROM:<bob@example.org>\r\n", strlen("MAIL FROM:<bob@example.org>\r\n"), 0);
81 a = recv(Sk, RecvData, 512, 0);
82 RecvData[a] = 0;
83 printf("%s\n", RecvData);
84 send(Sk, "RCPT TO:<somegmail@gmail.com>\r\n", strlen("RCPT TO:<somegmail@gmail.com>\r\n"), 0);
85 a = recv(Sk, RecvData, 512, 0);
86 RecvData[a] = 0;
87 printf("%s\n", RecvData);
88 send(Sk, "DATA\r\n", strlen("DATA\r\n"), 0);
89 a = recv(Sk, RecvData, 512, 0);
90 RecvData[a] = 0;
91 printf("%s\n", RecvData);
92
93 send(Sk, "From: \"Bob Example\" <bob@example.org>\r\n", strlen("From: \"Bob Example\" <bob@example.org>\r\n"), 0);
94 send(Sk, "To: Alice Example <somegmail@gmail.com>\r\n", strlen("To: Alice Example <somegmail@gmail.com>\r\n"), 0);
95 send(Sk, "Date: Tue, 15 January 2008 16:02:43 -0500\r\n", strlen("Date: Tue, 15 January 2008 16:02:43 -0500\r\n"), 0);
96 send(Sk, "Subject: Test message\r\n", strlen("Subject: Test message\r\n"), 0);
97 send(Sk, "\r\n", strlen("\r\n"), 0);
98 send(Sk, "Hello Alice.\r\n.\r\n", strlen("Hello Alice.\r\n.\r\n"), 0);
99 a = recv(Sk, RecvData, 512, 0);
100 RecvData[a] = 0;
101 printf("%s\n", RecvData);
102
103 }
104 else
105 {
106 MessageBoxA(0,"Recv bad",0,0);
107 }
108 return 0;
109}