如何在curl中将邮件正文设置为html?

时间:2016-06-03 09:21:18

标签: c++ http curl

我需要将html表作为电子邮件正文发送。我只是在下面提到内容类型为html,但它没有用。

headers = curl_slist_append(headers, "Content-Type: text/html");
/* pass our list of custom made headers */
curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);

我找不到图书馆网站的例子。

2 个答案:

答案 0 :(得分:4)

CURLOPT_HTTPHEADER不适用于任何SMTP选项(CURLOPT_MAIL_FROMCURLOPT_MAIL_RCPTCURLOPT_MAIL_AUTH)。相反,您需要使用CURLOPT_READFUNCTION

/* Disclaimer: untested code */
char *msg = "To: bob@example.com\r\n"
            "From: alice@example.com\r\n"
            "Content-Type: text/html; charset=us-ascii\r\n"
            "Mime-version: 1.0\r\n"
            "\r\n"
            "<html><head>\r\n"
            "<meta http-equiv=\"Content-Type\" content="text/html; charset=us-ascii\">\r\n"
            "</head><body>\r\n"
            "<p>Hi Bob</p>\r\n"
            "</body></html>\r\n"

size_t callback(char *buffer, size_t size, size_t nitems, void *instream) {
    /* you actually need to check that buffer <= size * nitems */
    strcat(buffer, msg);
    return strlen(buffer);
}

curl_easy_setopt(curl, CURLOPT_READFUNCTION, callback);
curl_easy_perform(curl);

documentation for CURLOPT_READFUNCTION有更多信息。虽然,如果您已经发送纯文本电子邮件,那么您就去过那里。

此处唯一真正的“技巧”在{* 3}}中由sameerkn链接,但您只需将Content-Type标头转储到电子邮件缓冲区中。没有像HTTP那样聪明的标题设置。

另外:我不确定您是否需要Content-Transfer-Encoding标头,我已将上面的charset设置为us-ascii,但utf-8之类的内容可能需要传输编码

答案 1 :(得分:1)

curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);会在您的请求中设置 HTTP协议标题

您显示的标题适用于电子邮件数据(标题部分)

电子邮件数据格式:(它有2个部分,标题和正文用空行分隔)

Header: value
Header: value
Content-Type: text/html; charset="UTF-8"
//**********************//  << this is a blank line between Header and Body
Body Of Mail

您的电子邮件是否仅包含HTML?

尝试将以下标题添加到电子邮件标题Content-Transfer-Encoding

Content-Transfer-Encoding: quoted-printable
Content-Type: text/html; charset="UTF-8"

quoted-printable是对HTML数据进行的编码。您也可以将数据编码为base64

Content-Transfer-Encoding: base64

**编辑:如果您尝试使用curl发送邮件,请参阅 Send Mail Through CURL