diff options
Diffstat (limited to 'docs/examples/smtp-authzid.c')
-rw-r--r-- | docs/examples/smtp-authzid.c | 161 |
1 files changed, 0 insertions, 161 deletions
diff --git a/docs/examples/smtp-authzid.c b/docs/examples/smtp-authzid.c deleted file mode 100644 index decdb719d..000000000 --- a/docs/examples/smtp-authzid.c +++ /dev/null @@ -1,161 +0,0 @@ -/*************************************************************************** - * _ _ ____ _ - * Project ___| | | | _ \| | - * / __| | | | |_) | | - * | (__| |_| | _ <| |___ - * \___|\___/|_| \_\_____| - * - * Copyright (C) 1998 - 2019, 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. - * - * 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 - * furnished to do so, under the terms of the COPYING file. - * - * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY - * KIND, either express or implied. - * - ***************************************************************************/ - -/* <DESC> - * Send e-mail on behalf of another user with SMTP - * </DESC> - */ - -#include <stdio.h> -#include <string.h> -#include <curl/curl.h> - -/* - * This is a simple example show how to send an email using libcurl's SMTP - * capabilities. - * - * Note that this example requires libcurl 7.66.0 or above. - */ - -/* The libcurl options want plain addresses, the viewable headers in the mail - * can very well get a full name as well. - */ -#define FROM_ADDR "<ursel@example.org>" -#define SENDER_ADDR "<kurt@example.org>" -#define TO_ADDR "<addressee@example.net>" - -#define FROM_MAIL "Ursel " FROM_ADDR -#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", - "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 -}; - -struct upload_status { - int lines_read; -}; - -static size_t payload_source(void *ptr, size_t size, size_t nmemb, void *userp) -{ - struct upload_status *upload_ctx = (struct upload_status *)userp; - const char *data; - - if((size == 0) || (nmemb == 0) || ((size*nmemb) < 1)) { - return 0; - } - - data = payload_text[upload_ctx->lines_read]; - - if(data) { - size_t len = strlen(data); - memcpy(ptr, data, len); - upload_ctx->lines_read++; - - return len; - } - - return 0; -} - -int main(void) -{ - CURL *curl; - CURLcode res = CURLE_OK; - struct curl_slist *recipients = NULL; - struct upload_status upload_ctx; - - upload_ctx.lines_read = 0; - - curl = curl_easy_init(); - if(curl) { - /* This is the URL for your mailserver. In this example we connect to the - smtp-submission port as we require an authenticated connection. */ - curl_easy_setopt(curl, CURLOPT_URL, "smtp://mail.example.com:587"); - - /* Set the username and password */ - curl_easy_setopt(curl, CURLOPT_USERNAME, "kurt"); - curl_easy_setopt(curl, CURLOPT_PASSWORD, "xipj3plmq"); - - /* Set the authorisation identity (identity to act as) */ - curl_easy_setopt(curl, CURLOPT_SASL_AUTHZID, "ursel"); - - /* Force PLAIN authentication */ - curl_easy_setopt(curl, CURLOPT_LOGIN_OPTIONS, "AUTH=PLAIN"); - - /* Note that this option isn't 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, - * they could cause an endless loop. See RFC 5321 Section 4.5.5 for more - * details. - */ - curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM_ADDR); - - /* Add a recipient, in this particular case it corresponds to the - * To: addressee in the header. */ - 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 - * 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); - curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx); - curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L); - - /* Send the message */ - res = curl_easy_perform(curl); - - /* Check for errors */ - if(res != CURLE_OK) - fprintf(stderr, "curl_easy_perform() failed: %s\n", - curl_easy_strerror(res)); - - /* 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_easy_cleanup(curl); - } - - return (int)res; -} |