首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用libcurl发送电子邮件

如何使用libcurl发送电子邮件
EN

Stack Overflow用户
提问于 2020-10-18 14:57:46
回答 1查看 66关注 0票数 1

我可以成功地向我的gmail发送一封电子邮件,但它发送的是一条空消息,并且无法发送包含消息,不管怎样,我使用的代码如下:

代码语言:javascript
复制
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>
#define FROM    "<xxxxxx@gmail.com>"
#define TO      "<xxxxx@gmail.com>"

static const char* payload_text[] = 
{
  "To: " TO "\r\n",
  "From: " FROM "\r\n",
  "Subject: SMTP TLS example message\r\n",
  "Contain: Helllo\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, "xxxxxx@gmail.com");
        curl_easy_setopt(curl, CURLOPT_PASSWORD, "xxxxxxxx");
        curl_easy_setopt(curl, CURLOPT_URL, "smtp://smtp.gmail.com:587");
        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 (int)res;
}

如何解决这个问题?我对这个库一无所知,我唯一能收到的就是这个主题,谢谢大家的帮助。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-18 15:03:18

代码语言:javascript
复制
static const char* payload_text[] = 
{
  "To: " TO "\r\n",
  "From: " FROM "\r\n",
  "Subject: SMTP TLS example message\r\n",
  "Contain: Helllo\r\n",
  NULL
};

应该是这样的

代码语言:javascript
复制
static const char* payload_text[] = 
{
  "To: " TO "\r\n",
  "From: " FROM "\r\n",
  "Subject: SMTP TLS example message\r\n",
  "\r\n",
  "Helllo\r\n",
  NULL
};

也就是说,Contain:是错误的,并且在报头和消息之间应该有一个空行。

电子邮件格式描述为here

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64410564

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档