Author Topic: VC++ SendEmail function with socket programming source code  (Read 922 times)

kathir

  • Administrator
  • Sr. Member
  • *****
  • Posts: 283
VC++ SendEmail function with socket programming source code
« on: November 18, 2011, 03:22:16 pm »
Click the following to get the complete source code and project with executable.

http://www.softwareandfinance.com/Visual_CPP/EMailClient.html



Code: (C++)
//Source Code Listing

bool SendEmail(std::string smtpdomain, std::string fromname, std::string  fromdomain, std::string toname, std::string todomain, std::string subject, std::string message)
{
    SOCKET s = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
    if(s == -1)
    {
        AfxMessageBox("Socket Initialiation Error");
        return false;
    }
    SOCKADDR_IN serveraddr;
    struct hostent *hostentry;
 
    int portno = 25;
    bool bSent = false;
   
    hostentry = gethostbyname(smtpdomain.c_str());
    char *pipaddr = inet_ntoa (*(struct in_addr *)*hostentry->h_addr_list);
 
 
     memset(&serveraddr,0, sizeof(serveraddr));
     serveraddr.sin_family = AF_INET;
     serveraddr.sin_port = htons(portno);
     serveraddr.sin_addr.s_addr = inet_addr(pipaddr);
 
    //serv_addr.sa_data = htons(portno);
 
    if (connect(s,(SOCKADDR*)&serveraddr,sizeof(SOCKADDR_IN)) < 0)
    {
         AfxMessageBox("ERROR connecting to the server");
         exit(1);
    }
 
    char sbuf[1024], rbuf[1024];
   
    if(recv(s, rbuf, 1024, 0) > 0)
    {
        if(strnicmp(rbuf, "220", 3) == 0)
        {
            strcpy(sbuf, "helo kathir\r\n");
            if(send(s, sbuf, strlen(sbuf), 0) == strlen(sbuf))
            {
                recv(s, rbuf, 1024, 0);
                if(strnicmp(rbuf, "250", 3) == 0)
                {
                    sprintf(sbuf, "mail from: <%s@%s>\r\n", fromname.c_str(), fromdomain.c_str());
                    send(s, sbuf, strlen(sbuf), 0);
                    recv(s, rbuf, 1024, 0);
                    if(strnicmp(rbuf, "250", 3) == 0)
                    {
                        sprintf(sbuf, "rcpt to: <%s@%s>\r\n", toname.c_str(), todomain.c_str());
                        send(s, sbuf, strlen(sbuf), 0);
                        recv(s, rbuf, 1024, 0);
                        if(strnicmp(rbuf, "250", 3) == 0)
                        {
                            strcpy(sbuf, "data\r\n");
                            send(s, sbuf, strlen(sbuf), 0);
                            recv(s, rbuf, 1024, 0);
                            if(strnicmp(rbuf, "354", 3) == 0)
                            {
                                sprintf(sbuf, "from: %s@%s\r\nto:%s@%s\r\nsubject:%s\r\n\r\n%s\r\n.\r\n", fromname.c_str(), fromdomain.c_str(), toname.c_str(), todomain.c_str(), subject.c_str(), message.c_str());
                                send(s, sbuf, strlen(sbuf), 0);
                                recv(s, rbuf, 1024, 0);
                                if(strnicmp(rbuf, "250", 3) == 0)
                                {
                                    bSent = true;  
                                }
                            }
                        }
                    }
                }
            }
        }
    }
 
    if(bSent == false)
        AfxMessageBox(rbuf);
    ::closesocket(s);
}

 


Disclaimer: This web site is for educational and informational purposes only. Click here to read the Disclaimer.
Content copyright 2010-2014. Kathiresan. All rights reserved.
This page is using SMF version 2.0.1