Recently I tried to send an email using C++. Here is the solution that I found. Code will work without any issues in windows environment. I have tested this on visual studio 2005. But if you want to run this on linux/unix then use berkeley socket interface instead of winsock. I have used gamil server as the mail server. But I think any SMTP mail server with telnet enabled can use for this. Hope this will help you.
Code: Select all
#include <stdlib.h>
#include <winsock2.h>
#include <stdio.h>
#pragma comment(lib,"ws2_32.lib") // use to link the winsock library
#define MailServer "gmail-smtp-in.l.google.com"
#define Mailto "[email protected]"
#define Mailfrom "[email protected]"
#define bufsize 10000
int main()
{
char* subject = "This is a Test Email";
char* Message = "Hi\n This is a test email from my computer";
SOCKET mail_socket;
sockaddr_in service;
WORD wVersionRequested;
WSADATA wsaData;
struct hostent *host;
int wsaerr;
int recvBytes=0;
char *Temp_Buf = (char*) malloc(bufsize+1);
wVersionRequested = MAKEWORD(2, 2);
wsaerr = WSAStartup(wVersionRequested, &wsaData);
if (wsaerr != 0)
{
return 0;
}
mail_socket = socket(AF_INET,SOCK_STREAM,0);
if(mail_socket == INVALID_SOCKET)
{
WSACleanup();
return 0;
}
host = gethostbyname(MailServer);
memset(&service,0,sizeof(service));
memcpy(&(service.sin_addr),host->h_addr,host->h_length);
service.sin_family= host->h_addrtype;
service.sin_port= htons(25);
if (connect(mail_socket, (struct sockaddr *)&service,sizeof(service)) == -1)
{
perror("connect");
closesocket(mail_socket);
WSACleanup();
return 0;
}
memset(Temp_Buf,'\0',bufsize);
recvBytes = recv(mail_socket,Temp_Buf,bufsize,0);
memset(Temp_Buf,'\0',bufsize);
strcpy(Temp_Buf,"helo me.hi.com\n");
send(mail_socket,Temp_Buf,strlen(Temp_Buf),0);
recvBytes = recv(mail_socket,Temp_Buf,bufsize,0);
memset(Temp_Buf,'\0',bufsize);
sprintf(Temp_Buf,"MAIL FROM:<%s>\n",Mailfrom);
send(mail_socket,Temp_Buf,strlen(Temp_Buf),0);
recvBytes = recv(mail_socket,Temp_Buf,bufsize,0);
memset(Temp_Buf,'\0',bufsize);
sprintf(Temp_Buf,"RCPT TO:<%s>\n",Mailto);
send(mail_socket,Temp_Buf,strlen(Temp_Buf),0);
recvBytes = recv(mail_socket,Temp_Buf,bufsize,0);
memset(Temp_Buf,'\0',bufsize);
strcpy(Temp_Buf,"DATA\n");
send(mail_socket,Temp_Buf,strlen(Temp_Buf),0);
recvBytes = recv(mail_socket,Temp_Buf,bufsize,0);
memset(Temp_Buf,'\0',bufsize);
sprintf(Temp_Buf,"To:%s\nFrom:\%s\nSubject:%s\n%s\r\n.\r\n",Mailto,Mailfrom,subject,Message);
send(mail_socket,Temp_Buf,strlen(Temp_Buf),0);
memset(Temp_Buf,'\0',bufsize);
recvBytes = recv(mail_socket,Temp_Buf,bufsize,0);
memset(Temp_Buf,'\0',bufsize);
strcpy(Temp_Buf,"quit\n");
send(mail_socket,Temp_Buf,strlen(Temp_Buf),0);
recvBytes = recv(mail_socket,Temp_Buf,bufsize,0);
memset(Temp_Buf,'\0',bufsize);
closesocket(mail_socket);
WSACleanup();
return 0;
}