/*************************************************************************** * _ _ ____ _ * Project ___| | | | _ \| | * / __| | | | |_) | | * | (__| |_| | _ <| |___ * \___|\___/|_| \_\_____| * * $Id: ftpget.c,v 1.7 2008-02-27 09:06:15 bagder Exp $ */ #include #include #include #include using namespace std; #define MULTI_PERFORM_HANG_TIMEOUT 60 * 1000 /* * This is an example showing how to send an email via SMTP */ struct timeval tutil_tvnow(void); static const char *text[]={ "one", "two", "three", " Hello, this is CURL email SMTP", NULL }; struct WriteThis { int counter; }; static size_t read_callback(void *ptr, size_t size, size_t nmemb, void *userp) { struct WriteThis *pooh = (struct WriteThis *)userp; const char *data; if(size*nmemb < 1) return 0; data = text[pooh->counter]; if(data) { size_t len = strlen(data); memcpy(ptr, data, len); pooh->counter++; /* advance pointer */ return len; } return 0; /* no more data left to deliver */ } struct timeval tutil_tvnow(void) { /* ** time() returns the value of time in seconds since the Epoch. */ struct timeval now; now.tv_sec = (long)time(NULL); now.tv_usec = 0; return now; } long tutil_tvdiff(struct timeval newer, struct timeval older) { return (newer.tv_sec-older.tv_sec)*1000+ (newer.tv_usec-older.tv_usec)/1000; } int main(void) { CURL *curl; CURLM *mcurl; CURLcode res; CURLMcode mres; int running = 1; struct timeval mp_start; char mp_timedout = 0; struct WriteThis pooh; pooh.counter = 0; curl_global_init(CURL_GLOBAL_DEFAULT); curl = curl_easy_init(); mcurl = curl_multi_init(); if(curl) { struct curl_slist* rcpt_list = NULL; rcpt_list = curl_slist_append(rcpt_list, "arossen@opentext.com"); rcpt_list = curl_slist_append(rcpt_list, "arossen@rogers.com"); curl_easy_setopt(curl, CURLOPT_URL,"smtp://smtp.gmail.com:587"); curl_easy_setopt(curl, CURLOPT_USERNAME, "alona.rossen@gmail.com"); curl_easy_setopt(curl, CURLOPT_PASSWORD, "mypwd"); curl_easy_setopt(curl, CURLOPT_READFUNCTION, read_callback); curl_easy_setopt(curl, CURLOPT_MAIL_FROM, ""); curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, rcpt_list); curl_easy_setopt(curl, CURLOPT_USE_SSL, CURLUSESSL_ALL); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER,0); curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0); curl_easy_setopt(curl, CURLOPT_READDATA, &pooh); curl_easy_setopt(curl, CURLOPT_VERBOSE, 1); curl_easy_setopt(curl, CURLOPT_SSLVERSION, 0); curl_easy_setopt(curl, CURLOPT_SSL_SESSIONID_CACHE, 0); // res = curl_easy_perform(curl); curl_multi_add_handle(mcurl, curl); mp_timedout = 0; mp_start = tutil_tvnow(); while(running){ mres = curl_multi_perform(mcurl, &running); if (tutil_tvdiff(tutil_tvnow(), mp_start) > MULTI_PERFORM_HANG_TIMEOUT) { mp_timedout = 1; break; } if (running <= 0) { fprintf(stderr, "nothing left running.\n"); break; } } if (mp_timedout) { if (mp_timedout) fprintf(stderr, "mp_timedout\n"); fprintf(stderr, "ABORTING TEST, since it seems " "that it would have run forever.\n"); //res = TEST_ERR_RUNS_FOREVER; } curl_slist_free_all(rcpt_list); curl_multi_remove_handle(mcurl, curl); curl_multi_cleanup(mcurl); curl_easy_cleanup(curl); curl_global_cleanup(); return 0; } return -1; }