LinuxQuestions.org

LinuxQuestions.org (/questions/)
-   Linux - Newbie (https://www.linuxquestions.org/questions/linux-newbie-8/)
-   -   SMTP implementation (https://www.linuxquestions.org/questions/linux-newbie-8/smtp-implementation-136768/)

ommy 01-20-2004 01:32 PM

SMTP implementation
 
Hello people
I am stuck here with a little problem. As i am intrested in doing a little socket programming. I was looking for SMTP implementation. i got it downloaded from the net. Now I want to know about it that how it works. I have certain confusions about the code, that I want to clear. I am uploading the soucrce (smtp.c file) and I have commented every line with my confusion. I hope some one expert in socket programming will help me out with this.Yesi know it would take a little time but would be a great contribution towards my learning
Thank you all...for reading
ommy:Pengy:

-------------------------------------------------
here's the smtp code
----------------------------------------------
#include <stdio.h>
#include <io.h>

#include <stdio.h>//why do we need to include this again.....when we have done it above

//#define LINUX /* define this if you are on linux */
//#define WIN32 /* define this if you are on windows */

#ifdef WIN32
# include "io.h"
# include "winsock2.h" /* WSAGetLastError, WSAStartUp */
# define snprintf _snprintf
#endif

#ifdef LINUX
# include <netdb.h> /* gethostbyname */
# include <netinet/in.h> /* htons */
# include <sys/socket.h>
#endif

static void sendmail_write(
const int sock,
const char *str,
const char *arg
) {
char buf[4096];

if (arg != NULL)
snprintf(buf, sizeof(buf), str, arg); //I didnt get it
else
snprintf(buf, sizeof(buf), str); //I didnt get it

send(sock, buf, strlen(buf), 0); //I didnt get it
}

static int sendmail(
const char *from,
const char *to,
const char *subject,
const char *body,
const char *hostname,
const int port
) {
struct hostent *host; // where is hostent structure defined
struct sockaddr_in saddr_in; //and where is this structure
int sock = 0;

#ifdef WIN32
WSADATA wsaData;
if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
return -1;
}
#endif //should we disable it if we want it to be run on linux platform

sock = socket(AF_INET, SOCK_STREAM, 0); //wot is AF_INET and SOCK_STREAM??//
host = gethostbyname(hostname);//wher is gethostbyname

saddr_in.sin_family = AF_INET; //didnt get it completely
saddr_in.sin_port = htons((u_short)port);//didnt get it completely//
saddr_in.sin_addr.s_addr = 0;//didnt get it completely

memcpy((char*)&(saddr_in.sin_addr), host->h_addr, host->h_length);////didnt get it completely

if (connect(sock, (struct sockaddr*)&saddr_in, sizeof(saddr_in)) == -1) {//didnt get it
return -2;
}

sendmail_write(sock, "HELO %s\n", from); // greeting
sendmail_write(sock, "MAIL FROM: %s\n", from); // from
sendmail_write(sock, "RCPT TO: %s\n", to); // to
sendmail_write(sock, "DATA\n", NULL); // begin data

// next comes mail headers
sendmail_write(sock, "From: %s\n", from);//would it ask for input from the user//
sendmail_write(sock, "To: %s\n", to);
sendmail_write(sock, "Subject: %s\n", subject);

sendmail_write(sock, "\n", NULL);

sendmail_write(sock, "%s\n", body); // data

sendmail_write(sock, ".\n", NULL); // end data
sendmail_write(sock, "QUIT\n", NULL); // terminate

close(sock);

return 0;
}


int main(int argc, char *argv[]) {

int ret = sendmail( //what is this/how would it work
"from@from-host.org", /* from */
"to@to-host.org", /* to */
"Subject", /* subject */
"body", /* body */
"hostname", /* hostname */
25 /* port */
);

if (ret != 0)
fprintf(stderr, "Failed to send mail (code: %i).\n", ret);
else
fprintf(stdout, "Mail successfully sent.\n");

return ret;
}
//also can someone refine it for linux platform so that i could run it with gcc...you know i dont have to comment and uncomment it....just the command to compile it and it gets compiled

puresoul 01-02-2011 11:02 AM

i need smtp implementation code
 
hello ommy,

i need the code of SMTP implementation.
if u hv it..den plz mail me at rini.agarwal89@gmail.com.
plz its urgent


All times are GMT -5. The time now is 09:50 AM.