7 static size_t payload_source(
void *ptr,
size_t size,
size_t nmemb,
void *userp)
10 size_t rdsize = size*nmemb;
12 if ((size == 0) || (nmemb == 0) || (rdsize < 1) || (upload_ctx->
pos >= upload_ctx->
size))
17 if (rdsize + upload_ctx->
pos > upload_ctx->
size)
19 rdsize = upload_ctx->
size - upload_ctx->
pos;
22 memcpy(ptr, &upload_ctx->
payload[upload_ctx->
pos], rdsize);
23 upload_ctx->
pos += rdsize;
28 void send_message(
const char* dest,
const char* to[],
size_t to_size,
const char* from,
const char*
payload,
size_t payload_size)
32 struct curl_slist *recipients = NULL;
36 upload_ctx.
size = payload_size;
39 curl = curl_easy_init();
43 curl_easy_setopt(curl, CURLOPT_URL, dest);
45 curl_easy_setopt(curl, CURLOPT_MAIL_FROM, from);
49 for (
size_t ii = 0; ii < to_size; ++ii)
51 recipients = curl_slist_append(recipients, to[ii]);
53 curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
55 curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
56 curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
57 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
60 res = curl_easy_perform(curl);
64 fprintf(stderr,
"curl_easy_perform() failed: %s\n",
65 curl_easy_strerror(res));
68 curl_slist_free_all(recipients);
70 curl_easy_cleanup(curl);
74 void send_message_ssl(
const char* dest,
const char* to[],
size_t to_size,
const char* from,
const char*
payload,
size_t payload_size,
const char* username,
const char* pw,
int disableVerify)
77 CURLcode res = CURLE_OK;
78 struct curl_slist *recipients = NULL;
82 upload_ctx.
size = payload_size;
85 curl = curl_easy_init();
89 curl_easy_setopt(curl, CURLOPT_USERNAME, username);
90 curl_easy_setopt(curl, CURLOPT_PASSWORD, pw);
96 curl_easy_setopt(curl, CURLOPT_URL, dest);
103 curl_easy_setopt(curl, CURLOPT_USE_SSL, (
long)CURLUSESSL_ALL);
107 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
108 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
118 curl_easy_setopt(curl, CURLOPT_MAIL_FROM, from);
120 for (
size_t ii = 0; ii < to_size; ++ii)
122 recipients = curl_slist_append(recipients, to[ii]);
124 curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
129 curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
130 curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
131 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
136 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
139 res = curl_easy_perform(curl);
143 fprintf(stderr,
"curl_easy_perform() failed: %s\n",
144 curl_easy_strerror(res));
147 curl_slist_free_all(recipients);
150 curl_easy_cleanup(curl);
size_t size
Size of payload.
void send_message_ssl(const char *dest, const char *to[], size_t to_size, const char *from, const char *payload, size_t payload_size, const char *username, const char *pw, int disableVerify)
Sends a message to the given SMTP server, using SSL encryption.
void send_message(const char *dest, const char *to[], size_t to_size, const char *from, const char *payload, size_t payload_size)
Sends a message to the given SMTP server.
const char * payload
payload string
size_t pos
Current position within payload.
Structure to track progress of upload in cURL send function.