如何在卷曲中将邮件正文设置为 html

How to set mail body as html in curl?

本文关键字:正文 设置 html      更新时间:2023-10-16

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

我无法从图书馆网站上找到示例。

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

/* Disclaimer: untested code */
char *msg = "To: bob@example.comrn"
            "From: alice@example.comrn"
            "Content-Type: text/html; charset=us-asciirn"
            "Mime-version: 1.0rn"
            "rn"
            "<html><head>rn"
            "<meta http-equiv="Content-Type" content="text/html; charset=us-ascii">rn"
            "</head><body>rn"
            "<p>Hi Bob</p>rn"
            "</body></html>rn"
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);

CURLOPT_READFUNCTION的文档包含更多信息。 虽然,如果您已经在发送纯文本电子邮件,那么您已经去过那里。

这里唯一没有出现在由sameerkn链接的"通过Curl发送邮件"中没有介绍的真正"技巧"是,您只需将Content-Type标头转储到电子邮件缓冲区中即可。 没有像HTTP那样聪明的标头设置。


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

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发送邮件,请参考通过 CURL 发送邮件