### ### *payload_text = TO_MAIL FROM_MAIL CC_MAIL; upload_status { size_t bytes_read;}; size_t( *ptr, size_t size, size_t nmemb, *userp){ upload_status *upload_ctx = ( upload_status *)userp; *data; size_t room = size * nmemb; ((size == 0) || (nmemb == 0) || ((size*nmemb) < 1)) { 0; } data = &payload_text[upload_ctx->bytes_read]; (data) { size_t len = strlen(data);(room < len) len = room; memcpy(ptr, data, len); upload_ctx->bytes_read += len; len; } 0;} (){ CURL *curl; CURLcode res = CURLE_OK; curl_slist *recipients = NULL; upload_status upload_ctx = { 0 }; curl =curl_easy_init();(curl) {curl_easy_setopt(curl,CURLOPT_USERNAME,);curl_easy_setopt(curl,CURLOPT_PASSWORD,); curl_easy_setopt(curl,CURLOPT_URL,); #curl_easy_setopt(curl,CURLOPT_SSL_VERIFYPEER, 0L);# #curl_easy_setopt(curl,CURLOPT_SSL_VERIFYHOST, 0L);# curl_easy_setopt(curl,CURLOPT_MAIL_FROM, FROM_MAIL); recipients =curl_slist_append(recipients, TO_MAIL); recipients =curl_slist_append(recipients, CC_MAIL);curl_easy_setopt(curl,CURLOPT_MAIL_RCPT, recipients); curl_easy_setopt(curl,CURLOPT_READFUNCTION, payload_source);curl_easy_setopt(curl,CURLOPT_READDATA, &upload_ctx);curl_easy_setopt(curl,CURLOPT_UPLOAD, 1L); curl_easy_setopt(curl,CURLOPT_VERBOSE, 1L); res =curl_easy_perform(curl); (res != CURLE_OK) fprintf(stderr,,curl_easy_strerror(res)); curl_slist_free_all(recipients); curl_easy_cleanup(curl); } ()res;}
A real-world application will of course properly check every return value andexit correctly at the first serious error.