terça-feira, 15 de abril de 2014

[C] Envio de email usando a lib curl

Enviando email em C , usando autenticação TLS , com a lib curl:
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
 
#define FROM "<gmail@chucknorris.com>"
#define TO "<no-reply@gmail.com>"
#define SUBJECT "Testando envio de email com a lib curl"
#define SMTP_SERVER "smtp://smtp.gmail.com:587"
#define SMTP_USER "gmail@chucknorris.com"
#define SMTP_PASS "chuckn0rris"
 
static const char *payload_text[] = {
  "To: " TO "\r\n",
  "From: " FROM "(Chuck Norris)\r\n",
  "Content-Type: text/html\r\n",
  "Subject: " SUBJECT "\r\n",
  "\r\n",
  "<h1><font color='red'>hc0der.blogspot.com</font></h1>\r\n",
  "\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) {

 curl_easy_setopt(curl, CURLOPT_USERNAME, SMTP_USER);
 curl_easy_setopt(curl, CURLOPT_PASSWORD, SMTP_PASS);
 curl_easy_setopt(curl, CURLOPT_URL, SMTP_SERVER);

 curl_easy_setopt(curl, CURLOPT_USE_SSL, (long)CURLUSESSL_ALL);
 
 
 curl_easy_setopt(curl, CURLOPT_MAIL_FROM, FROM);
 
 recipients = curl_slist_append(recipients, TO);
 curl_easy_setopt(curl, CURLOPT_MAIL_RCPT, recipients);

 curl_easy_setopt(curl, CURLOPT_READFUNCTION, payload_source);
 curl_easy_setopt(curl, CURLOPT_READDATA, &upload_ctx);
 curl_easy_setopt(curl, CURLOPT_UPLOAD, 1L);

 curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);

 res = curl_easy_perform(curl);
    
 if(res != CURLE_OK)
  fprintf(stderr, "curl_easy_perform() failed: %s\n",curl_easy_strerror(res));

 curl_slist_free_all(recipients);
 curl_easy_cleanup(curl);
}
 
 return(0);
}

Teste:

Nenhum comentário:

Postar um comentário