Bycodec-Den (C) De Yazılmış SMTP Mail Sender (Gmail)
-
program google gmail'in SMTP servisi ile mail gönderir.
en basit hanili yayınlıyorum kullanımı çok kolay
fonksiyonun prototipi şöyledir:
int MailIt (char *mailserver, char *emailto, char *emailfrom,char *emailsubject, char *emailmessage);
mailserver = kullanılıcak SMTP server adresi olması gerekiyor gmail için ("gmail-smtp-in.l.google.com")
emailto = mail'in gönderiliceği adres yazılıcak (banagelsin@gmail.com) adres gmail uzantılı olmalıdır.
emailfrom = gönderici kısmında görünmesini istediğiniz adres yada isim ("superman -)")
emailsubject = konu kısmında görünmesini istediğiniz şeyi yazın ("test mail")
emailmessage = burasıda mail kısmında yazmak istediklerinizdir("cart curt feş mekan");
örnekte verdiğim program çalıştıgını dizindeki bir dosyay açıp içindekileri adres kısmında girdiğiniz adrese göndermektedir.programın bulundugu klasöre mail.txt diye bir dosya açın ve içine mesajınızı yazın.
/*
ByCodeC SMTP gmail sender
*//*
projeye winsock.lib dosyasını inport etmeyi unutmayın !
*/#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <winuser.h>
#include <windowsx.h>
#include <time.h>
#include <stdlib.h>int MailIt (char *mailserver, char *emailto, char *emailfrom,
char *emailsubject, char *emailmessage);#define BUFSIZE 800
#define waittime 500#define cmailserver "gmail-smtp-in.l.google.com" //gmail smtp server
#define cemailto "mail gönderilicek adres @gmail.com"
#define cemailfrom "gönderici kısmında gözükmesini istediğiniz isim"
#define LogLength 100
#define SMTPLog "ring.txt"
#define cemailsubject "konu"
#define maxbuff 1000000
int main(void)
{
int ch=0;
unsigned int n=0;char *chr = (char *) malloc(maxbuff+1);
strcpy(chr,"\r\n\r\n\r\n\r\n\r\n\r\n");FILE *fl;
fl = fopen("mail.txt","r+");
n = strlen(chr);
if(fl == NULL)
printf("dosya acIlamadI\n\n");
while(ch != EOF){
ch = fgetc(fl);
chr[n++] = ch;
}chr[n] = '\0';
printf("[%d]\n\n",strlen(chr));
puts(chr);
system("pause");MailIt( cmailserver, cemailto, cemailfrom, cemailsubject,chr);
system("pause");
return 10;
}
int MailIt (char *mailserver, char *emailto, char *emailfrom,char *emailsubject, char *emailmessage){
SOCKET sockfd;
WSADATA wsaData;
FILE *smtpfile;#define bufsize 3000
int bytes_sent;
int err;
struct hostent *host;
struct sockaddr_in dest_addr;char *line = (char *) malloc(maxbuff+1);
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);printf("%s\n",Rec_Buf);
strcpy(line,"helo www.softembedded.com\n");
fputs(line,smtpfile);printf("%s\n",line);
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);printf("%s\n",Rec_Buf);
strcpy(line,"MAIL FROM:<");
strncat(line,emailfrom,strlen(emailfrom));
strncat(line,">\n",3);
fputs(line,smtpfile);printf("%s\n",line);
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);printf("%s\n",Rec_Buf);
strcpy(line,"RCPT TO:<");
strncat(line,emailto,strlen(emailto));
strncat(line,">\n",3);
fputs(line,smtpfile);printf("%s\n",line);
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);printf("%s\n",Rec_Buf);
strcpy(line,"DATA\n");
fputs(line,smtpfile);printf("%s\n",line);
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);printf("%s\n",Rec_Buf);
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);printf("%s\n",line);
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);printf("%s\n",Rec_Buf);
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);printf("%s\n",Rec_Buf);
fclose(smtpfile);
system("pause");
#ifdef WIN32
closesocket(sockfd);
WSACleanup();
system("pause");
#else
close(sockfd);
#endif
} -
ByCodeC den yazarken kastekmek istediğim kodların tarafımdan yazıldıgı test edildiği ve en az bir aydır kullanıldıgını kastetmek istiyorum.ByCodeC den yazıyorsa konu başında kodu kullanmak isteyenlerin acaba kod çalışıyormu gibi bir kuşkuya düşmemelerini istiyorum.çünki ozman kendi yaptıkları hataları çok ufak bile olsa gözden kaçırabilirler.ama kodun çalıştıgından emin olurlarsa ufak bir gözden geçirmeyle yanlış yaptıkları yeri görüp düzeltir ve koddan faydalanabilirler.
