5 static size_t payload_source(
void* ptr,
size_t size,
size_t nmemb,
void* userp)
8 size_t rdsize = size * nmemb;
10 if ((size == 0) || (nmemb == 0) || (rdsize < 1) || (upload_ctx->
pos >= upload_ctx->
size))
15 if (rdsize + upload_ctx->
pos > upload_ctx->
size)
17 rdsize = upload_ctx->
size - upload_ctx->
pos;
20 memcpy(ptr, &upload_ctx->
payload[upload_ctx->
pos], rdsize);
21 upload_ctx->
pos += rdsize;
26 void send_message(
const char* dest,
const char* to[],
size_t to_size,
const char* from,
const char*
payload,
31 struct curl_slist* recipients = NULL;
35 upload_ctx.
size = payload_size;
38 curl = curl_easy_init();
42 curl_easy_setopt(curl, CURLOPT_URL, dest);
44 curl_easy_setopt(curl, CURLOPT_MAIL_FROM, from);
48 for (
size_t ii = 0; ii < to_size; ++ii)
50 recipients = curl_slist_append(recipients, to[ii]);
52 curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
54 curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
55 curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
56 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
59 res = curl_easy_perform(curl);
62 if (res != CURLE_OK) fprintf(stderr,
"curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
65 curl_slist_free_all(recipients);
67 curl_easy_cleanup(curl);
72 size_t payload_size,
const char* username,
const char* pw,
int disableVerify)
75 CURLcode res = CURLE_OK;
76 struct curl_slist* recipients = NULL;
80 upload_ctx.
size = payload_size;
83 curl = curl_easy_init();
87 curl_easy_setopt(curl, CURLOPT_USERNAME, username);
88 curl_easy_setopt(curl, CURLOPT_PASSWORD, pw);
94 curl_easy_setopt(curl, CURLOPT_URL, dest);
101 curl_easy_setopt(curl, CURLOPT_USE_SSL, (
long)CURLUSESSL_ALL);
105 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0L);
106 curl_easy_setopt(curl, CURLOPT_SSL_VERIFYHOST, 0L);
116 curl_easy_setopt(curl, CURLOPT_MAIL_FROM, from);
118 for (
size_t ii = 0; ii < to_size; ++ii)
120 recipients = curl_slist_append(recipients, to[ii]);
122 curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
127 curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
128 curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
129 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
134 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
137 res = curl_easy_perform(curl);
140 if (res != CURLE_OK) fprintf(stderr,
"curl_easy_perform() failed: %s\n", curl_easy_strerror(res));
143 curl_slist_free_all(recipients);
146 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.