c++ 利用const char数组实现libcurl在邮件中生成CRLF

4sup72z8  于 2023-01-06  发布在  其他
关注(0)|答案(1)|浏览(109)

使用C++,Windows 10,VS 2019, curl libcurl
我正在尝试填充const char数组以便使用libcurl发送电子邮件。
libcurl示例在main()之外以这种方式定义char数组

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

但是,我已经将示例代码中的main()转换为接受参数,这样我就可以传递From、To、CC.Subject和Body。因此,在main()的顶部,我有以下代码:

std::string strBody = argv[5];

因为inline_html[]是常量,所以我尝试在main()中动态创建另一个数组,如下所示

char* inline_array = new char[strBody.length() + 1];

如果我在strBody中查找char(10)或char(13),它们就在那里,但是如果我只是这样做,它们不会被放入inline_array[]中(或者至少它们在结果邮件中不会作为CRLFReact)

for (int i = 0; i < strBody.length(); i++) {
  inline_array[i] = strBody[i];
}

生成的电子邮件将只是一个连续的文本块,没有原始字符串中的原始换行符。
如果我查找char(10)和(13)并替换如下转义字符

for (int i = 0; i < strBody.length(); i++) {
    if (strBody[i] == char(10)) {
        inline_array[i] = '\n'; //  '\x10';
    }
    else if (strBody[i] == char(13)) {
        inline_array[i] = '\x13';  // '\r';
    }
    else {
        inline_array[i] = strBody[i];
    }
}

我在发送的最后一封电子邮件中只收到“\r\n”,而不是所需的CRLF。
我知道可以单独地将转义的CRLR放入char inline_html2Chr[230]中,如下所示

inline_html2Chr[i] = '\n';

我已经在调试模式下完成了,并且能够看到例如html2Chr[i] == '\n'。
但是当我把它传递给libcurl函数来发送这样的邮件时

curl_mime_data(part, inline_html2Chr, CURL_ZERO_TERMINATED);

我仍然得到一个只有“\r\n”嵌入的连续文本块。
即使我在main()之外修改了示例代码中的inline_html[],将CRLF像这样放在主体中

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

我得到“LineOne LineTwo”作为正文,其中没有换行符,但正文中也没有“\r\n”。
有人能告诉我我还可以尝试什么吗?我只是在兜圈子,甚至记不住我尝试过的所有变化。
谢谢你的建议。
艾德

csbfibhn

csbfibhn1#

当你从“HTML”的Angular 而不是字符串和字符的Angular 来思考时,很明显,@ defaffled是正确的,\n\r不是HTML词典的一部分,它必须是<br><p>

相关问题