Email issues

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.
any suggestions?
closed account (DSLq5Di1)
If only it were that easy.. you need a secure connection:-
http://www.codeproject.com/KB/IP/smtp_ssl.aspx
http://www.coastrd.com/smtps
Last edited on
So what commands should i send. I don't really want to get too deep into this because i just want to know how to send an email, this is just one piece of the puzzle. I have been reading about this for more than 8 hours, and i am just fed up with it. If somebody can just give me the commands i must send I would GREATLY appreciate it.
closed account (DSLq5Di1)
Assuming you've read through either of those links I posted above.. you would realise its not a trivial matter of sending a couple of commands and you are done.

If you wish to handle all the nity grity of authentication, obtaining and verifying a server certificate, an example can be found here -> http://www.coastrd.com/c-schannel-smtp

Though for simplicity I would recommend using an smtp/ssl library, there is plenty floating around if you search for them.
OH MY GOSH!!!! That's just ridiculous. well, what libraries do you recommend that i use?
A little googling produced this: http://www.coastrd.com/smtps which may be of use.
Topic archived. No new replies allowed.