Winsock Email Sender.

I can't send an email with c++ and i have been searching for a while and it's bugging me. here is my code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
#include <iostream>
#include <winsock2.h>
#pragma comment(lib,"ws2_32.lib")

int main()
{
	// Initialise Winsock
	WSADATA WsaDat;
	if(WSAStartup(MAKEWORD(2,2),&WsaDat)!=0)
	{
		std::cout<<"Winsock error - Winsock initialization failed\r\n";
		WSACleanup();
		system("PAUSE");
		return 0;
	}
	
	// Create our socket
	SOCKET Socket=socket(AF_INET,SOCK_STREAM,IPPROTO_TCP);
	if(Socket==INVALID_SOCKET)
	{
		std::cout<<"Winsock error - Socket creation Failed!\r\n";
		WSACleanup();
		system("PAUSE");
		return 0;
	}

	// Resolve IP address for hostname
	struct hostent *host;
	if((host=gethostbyname("smtp.gmail.com"))==NULL)
	{
		std::cout<<"Failed to resolve hostname.\r\n";
		WSACleanup();
		system("PAUSE");
		return 0;
	}

	// Setup our socket address structure
	SOCKADDR_IN SockAddr;
	SockAddr.sin_port=htons(587);
	SockAddr.sin_family=AF_INET;
	SockAddr.sin_addr.s_addr=*((unsigned long*)host->h_addr);

	// Attempt to connect to server
	if(connect(Socket,(SOCKADDR*)(&SockAddr),sizeof(SockAddr))!=0)
	{
		std::cout<<"Failed to establish connection with server\r\n";
		WSACleanup();
		system("PAUSE");
		return 0;
	}

	// Display message from server
	char buffer[1000];
	memset(buffer,0,999);
	int inDataLength=recv(Socket,buffer,1000,0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "HELO smtp.gmail.com\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "STARTTLS\r\n");
    send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "MAIL FROM:<***@gmail.com>\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "RCPT TO:<*****@gmail.com>\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "DATA\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "Subject:FIRST EMAIL WITH C++!\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "From: ****@gmail.com\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "To: *****@gmail.com\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "HELLO GOD\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "\r\n. \r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "QUIT\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	// Shutdown our socket
	shutdown(Socket,SD_SEND);

	// Close our socket entirely
	closesocket(Socket);

	// Cleanup Winsock
	WSACleanup();
	system("PAUSE");
	return 0;
}


The main issue is here:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "HELO smtp.gmail.com\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "STARTTLS\r\n");
    send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "MAIL FROM:<***@gmail.com>\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "RCPT TO:<*****@gmail.com>\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "DATA\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "Subject:FIRST EMAIL WITH C++!\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "From: ****@gmail.com\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "To: *****@gmail.com\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "HELLO GOD\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "\r\n. \r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;

	ZeroMemory(&buffer, sizeof(buffer));
	sprintf(buffer, "QUIT\r\n");
	send(Socket, buffer, strlen(buffer), 0);
	recv(Socket, buffer, sizeof(buffer), 0);
	std::cout<<buffer;


After the STARTTLS command the server says "Ready to start TLS", but it won't take my commands after that. I don't know what is wrong and i spent countless hours trying to find out what is wrong. Any help is appreciated.
Last edited on
Use COM instead, its' just a few lines of code to send an email
Topic archived. No new replies allowed.