aboutsummaryrefslogtreecommitdiff
path: root/docs/examples/smtp-authzid.c
diff options
context:
space:
mode:
Diffstat (limited to 'docs/examples/smtp-authzid.c')
-rw-r--r--docs/examples/smtp-authzid.c63
1 files changed, 31 insertions, 32 deletions
diff --git a/docs/examples/smtp-authzid.c b/docs/examples/smtp-authzid.c
index decdb719d..b315b215c 100644
--- a/docs/examples/smtp-authzid.c
+++ b/docs/examples/smtp-authzid.c
@@ -5,11 +5,11 @@
* | (__| |_| | _ <| |___
* \___|\___/|_| \_\_____|
*
- * Copyright (C) 1998 - 2019, Daniel Stenberg, <daniel@haxx.se>, et al.
+ * Copyright (C) 1998 - 2021, Daniel Stenberg, <daniel@haxx.se>, et al.
*
* This software is licensed as described in the file COPYING, which
* you should have received as part of this distribution. The terms
- * are also available at https://curl.haxx.se/docs/copyright.html.
+ * are also available at https://curl.se/docs/copyright.html.
*
* You may opt to use, copy, modify, merge, publish, distribute and/or sell
* copies of the Software, and permit persons to whom the Software is
@@ -47,41 +47,42 @@
#define SENDER_MAIL "Kurt " SENDER_ADDR
#define TO_MAIL "A Receiver " TO_ADDR
-static const char *payload_text[] = {
- "Date: Mon, 29 Nov 2010 21:54:29 +1100\r\n",
- "To: " TO_MAIL "\r\n",
- "From: " FROM_MAIL "\r\n",
- "Sender: " SENDER_MAIL "\r\n",
+static const char *payload_text =
+ "Date: Mon, 29 Nov 2010 21:54:29 +1100\r\n"
+ "To: " TO_MAIL "\r\n"
+ "From: " FROM_MAIL "\r\n"
+ "Sender: " SENDER_MAIL "\r\n"
"Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
- "rfcpedant.example.org>\r\n",
- "Subject: SMTP example message\r\n",
- "\r\n", /* empty line to divide headers from body, see RFC5322 */
- "The body of the message starts here.\r\n",
- "\r\n",
- "It could be a lot of lines, could be MIME encoded, whatever.\r\n",
- "Check RFC5322.\r\n",
- NULL
-};
+ "rfcpedant.example.org>\r\n"
+ "Subject: SMTP example message\r\n"
+ "\r\n" /* empty line to divide headers from body, see RFC5322 */
+ "The body of the message starts here.\r\n"
+ "\r\n"
+ "It could be a lot of lines, could be MIME encoded, whatever.\r\n"
+ "Check RFC5322.\r\n";
struct upload_status {
- int lines_read;
+ size_t bytes_read;
};
-static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp)
+static size_t payload_source(char *ptr, size_t size, size_t nmemb, void *userp)
{
struct upload_status *upload_ctx = (struct upload_status *)userp;
const char *data;
+ size_t room = size * nmemb;
if((size == 0) || (nmemb == 0) || ((size*nmemb) < 1)) {
return 0;
}
- data = payload_text[upload_ctx->lines_read];
+ data = &payload_text[upload_ctx->bytes_read];
if(data) {
size_t len = strlen(data);
+ if(room < len)
+ len = room;
memcpy(ptr, data, len);
- upload_ctx->lines_read++;
+ upload_ctx->bytes_read += len;
return len;
}
@@ -94,9 +95,7 @@ int main(void)
CURL *curl;
CURLcode res = CURLE_OK;
struct curl_slist *recipients = NULL;
- struct upload_status upload_ctx;
-
- upload_ctx.lines_read = 0;
+ struct upload_status upload_ctx = { 0 };
curl = curl_easy_init();
if(curl) {
@@ -114,7 +113,7 @@ int main(void)
/* Force PLAIN authentication */
curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=PLAIN");
- /* Note that this option isn't strictly required, omitting it will result
+ /* Note that this option is not strictly required, omitting it will result
* in libcurl sending the MAIL FROM command with empty sender data. All
* autoresponses should have an empty reverse-path, and should be directed
* to the address in the reverse-path which triggered them. Otherwise,
@@ -128,7 +127,7 @@ int main(void)
recipients = curl_slist_append(recipients, TO_ADDR);
curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);
- /* We're using a callback function to specify the payload (the headers and
+ /* We are using a callback function to specify the payload (the headers and
* body of the message). You could just use the CURLOPT_READDATA option to
* specify a FILE pointer to read from. */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
@@ -146,13 +145,13 @@ int main(void)
/* Free the list of recipients */
curl_slist_free_all(recipients);
- /* curl won't send the QUIT command until you call cleanup, so you should
- * be able to re-use this connection for additional messages (setting
- * CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and calling
- * curl_easy_perform() again. It may not be a good idea to keep the
- * connection open for a very long time though (more than a few minutes
- * may result in the server timing out the connection), and you do want to
- * clean up in the end.
+ /* curl will not send the QUIT command until you call cleanup, so you
+ * should be able to re-use this connection for additional messages
+ * (setting CURLOPT_MAIL_FROM and CURLOPT_MAIL_RCPT as required, and
+ * calling curl_easy_perform() again. It may not be a good idea to keep
+ * the connection open for a very long time though (more than a few
+ * minutes may result in the server timing out the connection), and you do
+ * want to clean up in the end.
*/
curl_easy_cleanup(curl);
}