NASM - The Netwide Assembler

NASM Forum => Programming with NASM => Topic started by: ngochuan1st on September 19, 2012, 02:31:57 AM

Title: SMTP Help !
Post by: ngochuan1st on September 19, 2012, 02:31:57 AM
i want to send mail via SMTP using Gmail Account, how to write it ?? (NASM or C/C++) !!!
Title: Re: SMTP Help !
Post by: Bryant Keller on September 19, 2012, 04:00:57 AM
1.) Read RFC 5321 (http://tools.ietf.org/html/rfc5321), "Secure programming with OpenSSL API" (Kenneth Ballard, 2012) (http://www.ibm.com/developerworks/linux/library/l-openssl/index.html), and "Set up POP in mail clients" (Google) (http://support.google.com/mail/bin/answer.py?hl=en&answer=13287).

2.) Implement the SMTP protocol and use your new understanding of the OpenSSL API to provide the secure connection required by Gmail.

3.) Make sure your Gmail account is configured to support external clients.
Title: Re: SMTP Help !
Post by: ngochuan1st on September 19, 2012, 04:02:40 AM
Oh, thanks, i'm trying...
Title: Re: SMTP Help !
Post by: ngochuan1st on September 19, 2012, 04:07:23 AM
You can give me the example with nasm or Microsoft Visual C++ 6.0 ?
Title: Re: SMTP Help !
Post by: Bryant Keller on September 19, 2012, 04:12:22 AM
Read those documents I linked too and give a try. Or possibly search Google for some pre-built SMTP libraries or clients and start from there. Put forth a little effort, write some code. If you have any problems at that point, then I'll be happy to help.
Title: Re: SMTP Help !
Post by: ngochuan1st on September 19, 2012, 04:15:59 AM
I'm using Visual C++ 6.0
This code not work...

Code: [Select]

#include <StdAfx.h>
#include <windows.h>
#include <stdio.h>
#include <io.h>
#include <conio.h>
#define snprintf _snprintf


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);
    else
        snprintf(buf, sizeof(buf), str);

    send(sock, buf, strlen(buf), 0);
}

static int sendmail(
                const char *from,
                const char *to,
                const char *subject,
                const char *body,
                const char *hostname,
                const int   port
            ) {

    struct hostent *host;
    struct sockaddr_in saddr_in;
    int sock = 0;

    WSADATA wsaData;
    if (WSAStartup(MAKEWORD(2, 2), &wsaData) != 0) {
        return -1;
    }

    sock = socket(AF_INET, SOCK_STREAM, 0);
    host = gethostbyname(hostname);
    saddr_in.sin_family      = AF_INET;
    saddr_in.sin_port        = htons((u_short)port);
    saddr_in.sin_addr.s_addr = 0;
    memcpy((char*)&(saddr_in.sin_addr), host->h_addr, host->h_length);

    if (connect(sock, (struct sockaddr*)&saddr_in, sizeof(saddr_in)) == -1)
{
        return -2;
    }
 
    sendmail_write(sock, "HELO %s\n",       "Testname");    // 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
    sendmail_write(sock, "From: %s\n",      from);
    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

    closesocket(sock);//*******************************

    return 0;
}


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

    int ret = sendmail(
        "from@gmail.com",  // from my account
        "to@gmail.com", // to - your account
        "Test Mail!",
        "Hello",
        "smtp.gmail.com",//this is my ISP -use your own
        25
    );

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


Title: Re: SMTP Help !
Post by: Bryant Keller on September 19, 2012, 04:45:52 AM
Again, READ the articles and then WRITE some code. Copying some random open SMTP code from the Internet isn't going to help you learn. The first link I posted explained the SMTP protocol in detail. The second link provided you with a tutorial on how to use the OpenSSL API to create a secure connection. Gmail (afaik) doesn't support open SMTP connections, you have to authenticate first. Gmail uses TLS (RFC 2246 (http://www.ietf.org/rfc/rfc2246.txt)) for this authentication. This is what the OpenSSL API is for.
Title: Re: SMTP Help !
Post by: ngochuan1st on September 19, 2012, 05:05:40 AM
Thanks.  where are you working? i'm come from VietNam. :-)
Title: Re: SMTP Help !
Post by: Rob Neff on September 19, 2012, 04:02:16 PM
Ah, i'm hooked some function with C/C++ in NT Kernel as NtOpenProcess, NtSetInformationFile etc..., but i don't know how to communication between system driver (NT Hooking same as Antivirus) and Application (C/C++).

This has absolutely nothing to do with SMTP but rather appears to be more of a thinly veiled attempt to continue on from your prior locked post.