【发布时间】:2012-10-14 21:06:38
【问题描述】:
我试图弄清楚如何在 Win7 上的 C++ 中动态更改 MIME 标头(将通过 SMTP 发送)内的信息。
以下是我正在使用的 MIME 标头的基本布局。
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 数组(据我的理解)。这是我正在尝试的方法。
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;
查看payload时,只显示两个部分的第一个字符串
控制台输出:
[several junk bytes]Date: Sun, 14 Oct 2012 12:59:19 +1000
Test information.
而应该显示完整的 MIME 标头。
我不明白为什么这不起作用。我相信问题可能在于我不了解 {} 在 C++ 中的行为,也找不到属于这种上下文的教程/示例代码(大多数似乎只解决没有多个字符串用逗号分隔的 char 数组弯曲括号内)。
简单地说,我怎样才能将一个字符串附加到一个包含在曲括号中的现有字符数组的末尾?
感谢您的阅读,我们会热情地接受建议。
跟进:
使用该函数创建std::string,然后将其转换为const char *,它会根据需要格式化 MIME 消息,但无法使用我用于 SMTP 的库。
最终结果必须采用char* payload[] = {"strings, seperated, by, comma"}; 的形式,而不是char *payload = "strings\nseperated\nby\ncommas",.c_str() 似乎是这样做的。
有人知道如何将 std::string 或 char* array[] 转换为 char* payload[] = {"strings, seperated, by, comma"}; 吗?我认为括号是重要的部分。
简单的问题:
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() 在这样实现时会导致程序崩溃。我想我需要做的就是这个基本操作。
【问题讨论】:
-
如果您无法生成动态 Message-Id,请忽略它,您的 MTA 将分配一个 Message-Id。如果您需要在发送消息之前知道 Message-Id,请确保为每条消息生成一个唯一 ID。
标签: c++ arrays char concatenation mime