You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用libcurl发送邮件时,让const char数组生成CRLF换行的问题

解决libcurl发送HTML邮件时换行不生效的问题

环境

  • C++、Windows 10、VS 2019、libcurl库

问题核心

通过命令行参数传递邮件正文给libcurl发送HTML邮件时,无论是直接保留\r\n、转义处理,还是修改示例静态HTML数组中的\r\n,邮件正文都无法显示预期换行——要么是连续文本,要么把转义字符当字符串显示。

原因

HTML规范中,文本里的\r\n、\n等换行符会被解析为空格,只有HTML标签(如<br>、<p>)才能触发换行。libcurl仅负责原样传递内容,不会自动将文本换行转换为HTML格式的换行。示例静态数组中的换行效果来自<br />标签,而非代码里的\r\n(那些只是代码排版用的)。

解决方案

方案1:发送纯文本邮件

如果不需要HTML格式,将MIME类型设置为text/plain,此时\r\n会被邮件客户端解析为换行:

curl_mime* part = curl_mime_addpart(curl);
curl_mime_type(part, "text/plain");
// 直接使用含\r\n的文本内容
curl_mime_data(part, inline_array, CURL_ZERO_TERMINATED);

方案2:将纯文本换行转换为HTML标签

若需发送HTML邮件,把输入文本中的\r\n替换为<br>标签,再作为HTML内容传递:

// 处理命令行传入的正文,转成HTML格式
std::string strBody = argv[5];
std::string htmlBody;
for (char c : strBody) {
    if (c == '\r') {
        continue; // 跳过回车符,避免重复处理
    }
    else if (c == '\n') {
        htmlBody += "<br>";
    }
    else {
        htmlBody += c;
    }
}

// 生成libcurl可用的const char*
const char* inline_html = htmlBody.c_str();

// 配置MIME部分
curl_mime* part = curl_mime_addpart(curl);
curl_mime_type(part, "text/html");
curl_mime_data(part, inline_html, CURL_ZERO_TERMINATED);

验证示例静态数组

修改示例中的静态HTML数组,用<br>替换\r\n即可看到换行效果:

static const char inline_html[] =
"<html><body>\r\n"
"<p>LineOne<br>LineTwo</p>"
"<br />\r\n"
"</body></html>\r\n";

内容的提问来源于stack exchange,提问作者ehardin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 20:45:26