curl-library
Need help using CURL to send an email
Date: Wed, 31 Aug 2016 17:29:48 -0700
Hi,
I am following the sample code at
https://curl.haxx.se/libcurl/c/smtp-ssl.html to try to send an email
from a C program that I am writing, but it is not working. I am using
the same curl calls to do other stuff in the same program (HTTP POST,
etc.) and they work just fine. Here is the DEBUG info:
* STATE: INIT => CONNECT handle 0x8006bcc0; line 1402 (connection #-5000)
* Rebuilt URL to: smtp://smtp.gmail.com:465/
* Added connection 0. The cache now contains 1 members
[New Thread 7524.0x3cb4]
* Trying 74.125.25.109...
* STATE: CONNECT => WAITCONNECT handle 0x8006bcc0; line 1455 (connection #0)
* Connected to smtp.gmail.com (74.125.25.109) port 465 (#0)
* STATE: WAITCONNECT => SENDPROTOCONNECT handle 0x8006bcc0; line 1562
(connection #0)
* SMTP 0x8005cd88 state change from STOP to SERVERGREET
* STATE: SENDPROTOCONNECT => PROTOCONNECT handle 0x8006bcc0; line 1576
(connection #0)
* response reading failed
* multi_done
* Closing connection 0
* The cache now contains 0 members
curl_easy_perform() failed: Failure when receiving data from the peer
My source code is below.
Any advise?
Thanks everyone!
--
Greg
#define EMAIL "gstev46412_at_gmail.com"
static const char *payload_text_on[] = {
"Date: Mon, 29 Nov 2010 21:54:29 +1100\r\n",
"To: " EMAIL "\r\n",
"From: " EMAIL "(Greg Stevens)\r\n",
"Message-ID: <dcd7cb36-11db-487a-9f3a-e652a9458efd@"
"rfcpedant.example.org>\r\n",
"Subject: EV Charger Turned On\r\n",
"\r\n", /* empty line to divide headers from body, see RFC5322 */
"Turned the car charger on as the solar panels are generating more
than the house usage plus the car charger usage.\r\n",
"\r\n",
NULL
};
struct upload_status {
int lines_read;
};
static size_t payload_source_on(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_on[upload_ctx->lines_read];
if(data) {
size_t len = strlen(data);
memcpy(ptr, data, len);
upload_ctx->lines_read++;
return len;
}
return 0;
}
void sendmail(int event) {
CURL *curl;
CURLcode res = CURLE_OK;
struct curl_slist *recipients = NULL;
struct upload_status upload_ctx;
upload_ctx.lines_read = 0;
curl_global_init(CURL_GLOBAL_ALL);
curl = curl_easy_init();
if (curl) {
/* Set the URL for the gmail mailserver */
curl_easy_setopt(curl, CURLOPT_URL, "smtp://smtp.gmail.com:465");
/* Set username and password */
curl_easy_setopt(curl, CURLOPT_USERNAME, EMAIL);
curl_easy_setopt(curl, CURLOPT_PASSWORD, "foobar");
/* Set from address */
curl_easy_setopt(curl, CURLOPT_MAIL_FROM, EMAIL);
/* Set to use SSL */
curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
/* Set the recipient(s) */
recipients = curl_slist_append(recipients, EMAIL);
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). */
curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source_on);
curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);
if (DEBUG) {
curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
} else {
curl_easy_setopt(curl, CURLOPT_VERBOSE, 0);
}
/* 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 recipient(s) */
curl_slist_free_all(recipients);
/* Clean up */
curl_easy_cleanup(curl);
curl_global_cleanup();
}
}
--
Greg
-------------------------------------------------------------------
List admin: https://cool.haxx.se/list/listinfo/curl-library
Etiquette: https://curl.haxx.se/mail/etiquette.html
Received on 2016-09-01