#include <string.h>
#include "curl/curl.h"

/* Message text */
static const char *payload[] =
{
    "This is a test mail.\n",
    NULL
};

struct upload_status
{
    int lines_read;
};

static size_t read_callback ( void *ptr, size_t size, size_t nmemb, void *userp )
{
    struct upload_status* upload_ctx = (struct upload_status*)userp;
    const char *data;

    if ( (size == 0) || (nmemb == 0) || ((size * nmemb) < 1) )
    {
        return 0;
    }

    data = payload[upload_ctx->lines_read];

    if (data)
    {
        size_t len = strlen(data);
        memcpy ( ptr, data, len );
        upload_ctx->lines_read++;
        return len;
    }

    return 0;  /* when there is no more data to deliver */
}

int main ( void )
{
    CURL *curl;
    CURLcode curl_result;
    struct upload_status foo;
    struct curl_slist *recipients = NULL;

    foo.lines_read = 0;

    curl_global_init ( CURL_GLOBAL_DEFAULT );

    curl = curl_easy_init();
    if ( curl )
    {
	struct curl_slist* rcpt_list = NULL;

        curl_easy_setopt ( curl, CURLOPT_PROXY, "http://xxxxxxxxx:8080" );
        //curl_easy_setopt ( curl, CURLOPT_PROXYPORT, 8080 );
        curl_easy_setopt ( curl, CURLOPT_HTTPPROXYTUNNEL, 1L );
        curl_easy_setopt ( curl, CURLOPT_USE_SSL, CURLUSESSL_ALL );
        //curl_easy_setopt ( curl, CURLOPT_SSL_VERIFYPEER, 0L );
        //curl_easy_setopt ( curl, CURLOPT_SSL_VERIFYHOST, 0L );
        //curl_easy_setopt ( curl, CURLOPT_USE_SSL, CURLUSESSL_TRY );

	curl_easy_setopt ( curl, CURLOPT_URL, "smtp://smtp.gmail.com:587" );
        curl_easy_setopt ( curl, CURLOPT_CAINFO, "/home/naveen/gmail_certificate.crt");
        curl_easy_setopt ( curl, CURLOPT_USERNAME, "xxx@gmail.com" );
        curl_easy_setopt ( curl, CURLOPT_PASSWORD, "xxxxxxx" );
        //curl_easy_setopt ( curl, CURLOPT_TLSAUTH_USERNAME, "xxx@gmail.com" );
        //curl_easy_setopt ( curl, CURLOPT_TLSAUTH_PASSWORD, "xxxxxxx" );

	curl_easy_setopt ( curl, CURLOPT_MAIL_FROM, "xxx@gmail.com" );

	rcpt_list = curl_slist_append ( rcpt_list, "xxx@gmail.com" );
	curl_easy_setopt ( curl, CURLOPT_MAIL_RCPT, rcpt_list );

	curl_easy_setopt ( curl, CURLOPT_READFUNCTION, read_callback );
	curl_easy_setopt ( curl, CURLOPT_READDATA, &foo );
	curl_easy_setopt ( curl, CURLOPT_VERBOSE, 1 );

	curl_result = curl_easy_perform ( curl );

	curl_slist_free_all ( rcpt_list );
	curl_easy_cleanup ( curl );
	curl_global_cleanup();

	return 0;
    }

    else
    {
        printf ( "Error: %d", curl_result );
	return -1;
    }
}
