我需要将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);
我找不到图书馆网站的例子。
答案 0 :(得分:4)
CURLOPT_HTTPHEADER
不适用于任何SMTP选项(CURLOPT_MAIL_FROM
,CURLOPT_MAIL_RCPT
,CURLOPT_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