C ile SMTP Uygulaması

Üniversitede ödev olarak gerçekleştirdiğim; C programlama dili ile  SMTP protokollünü kullanarak okulun SMTP  sunucusuna bağlanıp mail gönderme işlemini yapan kodlarımı paylaşmak istedim.

Uygulama mantığındaki kodları sırasıyla paylaşçak olursak;

Maile ait olan gönderen , alıcı ve gönderilcek olan veriye ait bilgiyi

sokete yazarak sunucuya gönderiyoruz.


//reading first msg from server
contBuf = recv(sockfd, buf, 1000, 0);
buf[contBuf]='\0';
printf("S:FIRST MSG RECEIVED [%s]\n",buf);

/*send a string to the server*/
strcpy(msg,"helo fe.up.pt\r\n");
printf("C:[%s]\n",msg);
write(sockfd, msg, strlen(msg));
//reading 2nd msg from server
contBuf = recv(sockfd, buf, 1000, 0);
buf[contBuf]='\0';
printf("S:[%s]\n",buf);

//mail from info
strcpy(msg,"MAIL FROM:");
strncat(msg,emailfrom,strlen(emailfrom));
strncat(msg,"\r\n",4);
write(sockfd, msg, strlen(msg));
printf("C:[%s]\n",msg);
contBuf = recv(sockfd, buf, 1000, 0);
buf[contBuf]='\0';
printf("S:[%s]\n",buf);

//receipt to info

strcpy(msg,"RCPT TO:<");
strncat(msg,emailto,strlen(emailto));
strncat(msg,">\r\n",3);
write(sockfd, msg, strlen(msg));
printf("C:[%s]\n",msg);
contBuf = recv(sockfd, buf, 1000, 0);
buf[contBuf]='\0';
printf("S:[%s]\n",buf);

//data
strcpy(msg,"DATA\r\n");
write(sockfd, msg, strlen(msg));
printf("C:[%s]\n",msg);
contBuf = recv(sockfd, buf, 1000, 0);
buf[contBuf]='\0';
printf("S:[%s]\n",buf);

Eğer ki göndereceğimiz maile bir de ek txt dosyası eklemek istersek; göndermek istediğimiz dosyayı base64 kodlama sistemine göre kodlayıp mailimizi MIME protokolünün kurallarına göre düzenledikten sonra verimizi sokete yazdırarak sunucuya yollarız.


//emailmessage with MIME
if(strcmp(filepath,"")>0)
readFile(filepath);

strcpy(msg,"MIME-version: 1.0\n");
strcat(msg,"Content-type: multipart/mixed; boundary='frontier'\n");
strcat(msg,"--frontier\nContent-type: text/plain \n");
strcat(msg,emailmsg);

if(strcmp(filepath,"")>0)
{
strcat(msg,"\n--frontier\n");
strcat(msg,"Content-Type: application/octet-stream; file='");
strcat(msg,filepath);
strcat(msg,"'\nContent-Transfer-Encoding: base64\n");
strcat(msg,encoded);

}

strcat(msg,"\n--frontier--");
strcat(msg,"\r\n.\r\n");
write(sockfd, msg, strlen(msg));
printf("C:[%s]\n",msg);
contBuf = recv(sockfd, buf, 1000, 0);
buf[contBuf]='\0';
printf("S:[%s]\n",buf);

About this entry