【问题标题】:How to set mail body as html in curl?如何在 curl 中将邮件正文设置为 html?
【发布时间】:2016-10-03 07:05:30
【问题描述】:

我需要将 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);

我在图书馆网站上找不到示例。

【问题讨论】:

    标签: c++ http curl


    【解决方案1】:

    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 有更多信息。虽然,如果您已经在发送纯文本电子邮件,那么您已经去过那里了。

    这里唯一真正的 “技巧” 没有出现在由 sameerkn 链接的 Sending Mail Through Curl 中,您只需将 Content-Type 标头转储到电子邮件缓冲区中即可。没有像 HTTP 那样巧妙的标头设置。


    另外:我不确定您是否需要 Content-Transfer-Encoding 标头,我已将上面的 charset 设置为 us-ascii 但像 utf-8 这样的东西可能需要传输编码。

    【讨论】:

    • 感谢 grochmal,这个真的很有帮助。
    【解决方案2】:

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

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

    E-Mail 数据格式:(它有 2 个部分,Header 和 Body 用空行分隔)

    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

    【讨论】:

    • 这对我不起作用。我试过 headers = curl_slist_append(headers, "Content-Transfer-Encoding: base64;"); headers = curl_slist_append(headers, "Content-Type: text/html; charset=\"UTF-8\";"); /* 传递我们的自定义标头列表 */ curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
    • 您是否尝试通过 CURL 发送邮件?
    • 是的,很抱歉回复晚了。谢谢您的帮助。我使用上面提供的标题选项自己完成了。
    猜你喜欢
    • 2013-03-22
    • 2017-10-14
    • 2015-11-05
    • 2011-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 2012-03-15
    相关资源
    最近更新 更多