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;
ペイロードを表示すると、両方の部分の最初の文字列のみが表示されます
コンソールの出力:
[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()
この基本操作だけでいいと思います。