gpt4 book ai didi

c++ - 从头开始编写 MIME header

转载 作者:太空宇宙 更新时间:2023-11-04 12:04:09 24 4
gpt4 key购买 nike

我想弄清楚如何在 Win7 上用 C++ 动态更改 MIME header (将通过 SMTP 发送)内的信息。

下面是我正在使用的 MIME header 的基本布局。

char *payload_text[]={

"Date: Sun, 14 Oct 2012 12:59:19 +1000\n",
"To: " TO "\n",
"From: " FROM "\n",
"Cc: " CC "\n",
"Message-ID: <sender@greenearth.com>\n",
"Subject: This is a test with the payload as char\n",
"\n",
"Here is where the info goes\n",
"\n ",
NULL
};

我想创建一个可以改变的函数,例如,调用时头文件的主题,并返回一个字符数组(据我所知)。以下是我的尝试方式。

char *part1[]={

"Date: Sun, 14 Oct 2012 12:59:19 +1000\n",
"To: " TO "\n",
"From: " FROM "\n",
"Cc: " CC "\n",
"Message-ID: <sender@greenearth.com>\n",
"Subject: This is a test with the payload as char\n",
"\n"
};

char *body [] = { "Test information.",
"More test info" };

char *full_payload [ strlen(*part1) + strlen(*body) + 1 ];

strcat( *full_payload, *part1 );

strcat( *full_payload, *body );

cout << *full_payload;

查看有效负载时,仅显示两个部分的第一个字符串

控制台输出:

[several junk bytes]Date: Sun, 14 Oct 2012 12:59:19 +1000
Test information.

而应该显示整个 MIME header 。

我不明白为什么这行不通。我认为问题可能在于我不了解 C++ 中 {} 的行为,也找不到属于这种情况的教程/示例代码(大多数似乎只解决没有多个字符串的字符数组,这些字符串由逗号分隔在弯曲的括号内)。

简而言之,我如何将一个字符串追加到现有的字符数组的末尾,该字符数组用圆括号括起来?

感谢您的阅读,我们将热烈欢迎您的建议。

跟进:

使用该函数创建 std::string 然后将其转换为 const char * 它根据需要格式化 MIME 消息但无法使用库我正在使用 SMTP。

最终结果必须是 char* payload[] = {"strings, separated, by, comma"}; 而不是 char *payload = "strings\nseperated\nby\ncommas" 这就是 .c_str() 似乎要做的事情。

有谁知道如何将 std::stringchar* array[] 转换为 char* payload[] = {"strings, separated , by, 逗号"}; ?我认为括号是重要的部分。


简单问题:

char *first_array[]  = { "one", "two" };

char *second_array[] = { "three", "four"};

char *final_array[ strlen(*first_array) + strlen(*second_array) + 1];

strcpy( *final_array, *second_array );

cout << *final_array;

如何将 first_array 和 second_array 组合成 final_array? strcopy()strcat() 在这样实现时会导致程序崩溃。我想我需要做的就是这个基本操作。

最佳答案

part1body ,您正在创建一个字符串数组,而不是单个字符串。这类似于:

int values[] = { 1, 2, 3, 4 };

{}在此上下文中定义数组中的项目。因此 *part1*body仅引用每行的第一行——您的代码正在复制 part1 中第一个字符串的内容。和 body .

至于垃圾字节,strcat查找第一个空字符并从那里开始,替换空字符。因此,应使用 strcpy 附加第一个字符串。 .

要正确处理这个问题,请注意 std::vector<const char *> mime将具有与 const char * mime[] 相同的布局,因此您可以使用它来构建您的字符串数组:

void send_smtp_message(const char **message);

void build_mime_header(std::vector<const char *> &mime)
{
mime.push_back("Date: ...");
mime.push_back("From: " FROM);
// ...
mime.push_back(""); // for the newline between header and body
}

void main()
{
std::vector<const char *> mime;
build_mime_header(mime);
mime.push_back("This is a test.");
mime.push_back(NULL); // if the API requires this for end-of-data.
send_smtp_message(&mime[0]);
}

关于c++ - 从头开始编写 MIME header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12886536/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com