본문 바로가기

Programming/C/C++

G Mail SMTP 서버를 이용해 메일보내기.

Team. GGS/NXE 리더 H2R 입니다. (Hacking2Root)

이번에는 코드를 이용해서 G Mail SMTP 서버를 통하여 메일을 보내보도록 하겠습니다.

#include "stdafx.h"
#include <windows.h>
#include <stdio.h>
#include <stdlib.h>
#include <winsock.h>

#pragma comment(lib, "ws2_32.lib")

#define cmailserver "gmail-smtp-in.l.google.com"
#define cemailto "TEST@gmail.com"
#define cemailfrom "TEST@gmail.com"
#define SMTPLog "log.txt"
#define cemailsubject "test"
#define waittime 30
#define emailmessage "TEST"

int MailIt(char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage, int maxlen);

int main(int argc, char* argv[])
{
MailIt(cmailserver, cemailto, cemailfrom, cemailsubject, "asdfsadf", 255);
return 0;
}


int MailIt(char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage, int maxlen)
{

SOCKET sockfd;
WSADATA wsaData;
FILE *smtpfile;

#define bufsize 300
int bytes_sent; /* Sock FD */
int err;
struct hostent *host; /* info from gethostbyname */
struct sockaddr_in dest_addr; /* Host Address */
char line[256+100];
char *Rec_Buf = (char*) malloc(bufsize+1);
smtpfile=fopen(SMTPLog,"a+");
if (WSAStartup(0x202,&wsaData) == SOCKET_ERROR)
{
fputs("WSAStartup failed",smtpfile);
WSACleanup();
return -1;
}
if ( (host=gethostbyname(mailserver)) == NULL)
{
perror("gethostbyname");
exit(1);
}
memset(&dest_addr,0,sizeof(dest_addr));
memcpy(&(dest_addr.sin_addr),host->h_addr,host->h_length);


dest_addr.sin_family= host->h_addrtype;
dest_addr.sin_port= htons(25);


 

if ((sockfd=socket(AF_INET,SOCK_STREAM,0)) < 0)
{
perror("socket");
exit(1);
}

fputs("Connecting....\n",smtpfile);

if (connect(sockfd, (struct sockaddr *)&dest_addr,sizeof(dest_addr)) == -1)
{
perror("connect");
exit(1);
}
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"helo www.gmail.com\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"MAIL FROM:<");
strncat(line,emailfrom,strlen(emailfrom));
strncat(line,">\n",3);
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"RCPT TO:<");
strncat(line,emailto,strlen(emailto));
strncat(line,">\n",3);
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"DATA\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
Sleep(waittime);
strcpy(line,"To:");
strcat(line,emailto);
strcat(line,"\n");
strcat(line,"From:");
strcat(line,emailfrom);
strcat(line,"\n");
strcat(line,"Subject:");
strcat(line,emailsubject);
strcat(line,"\n");
strcat(line,emailmessage);
strcat(line,"\r\n.\r\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
strcpy(line,"quit\n");
fputs(line,smtpfile);
bytes_sent=send(sockfd,line,strlen(line),0);
Sleep(waittime);
err=recv(sockfd,Rec_Buf,bufsize,0);Rec_Buf[err] = '\0';
fputs(Rec_Buf,smtpfile);
fclose(smtpfile);
#ifdef WIN32
closesocket(sockfd);
WSACleanup();
#else
close(sockfd);
#endif
}

 

위 코드를 이용하여 GMail SMTP 서버를 이용하여 메일을 보낼수있습니다.

여기서 보실부분은 이부분입니다.

#define cmailserver "gmail-smtp-in.l.google.com"
#define cemailto "TEST@gmail.com"
#define cemailfrom "TEST@gmail.com"
#define SMTPLog "log.txt"
#define cemailsubject "test"
#define waittime 30
#define emailmessage "TEST"

cmailsever, 즉 gmail SMTP 서버를 사용한다는 소리 입니다.

cemailto " 받는 이메일"

cemailfrom " 보낼 이메일" 입니다.

cemailsubject " 메일 제목"

emailmessage " 이메일로 보낼 내용입니다"

POST by H2R

THANKS to Null@Root