在我的项目中,我使用libgmime作为MIME类型。我正在尝试使用std :: string作为正文创建新的 GMimeMessage 。 根据文档,可以使用 GMimeStream 和 GMimeDataWrapper 来准备数据,然后从此数据创建 GMimePart 以设置为MIME部分新消息。 代码:
std::string body = "some test data";
GMimeMessage* message = g_mime_message_new(FALSE);
//set header
g_mime_object_set_header((GMimeObject *) message, name.c_str()), value.c_str();
//create stream and write data into it.
GMimeStream* stream;
g_mime_stream_construct(stream, 0, body.length());
g_mime_stream_write_string(stream, body.c_str());
GMimeDataWrapper* wrapper = g_mime_data_wrapper_new_with_stream(stream, GMIME_CONTENT_ENCODING_DEFAULT);
//create GMimePart to be set as mime part of GMimeMessage
GMimePart* mime_part = g_mime_part_new();
g_mime_part_set_content_object(mime_part, wrapper);
g_mime_message_set_mime_part(message, (GMimeObject *) mime_part);
当我尝试以这种方式创建消息时,我在这里得到段错误:
g_mime_stream_write_string(stream, body.c_str());
也许我使用了错误的信息创建方法...... 它的正确方法是什么?
答案 0 :(得分:1)
初始化错误GMimeStream *stream
。需要:
GMimeStream *stream;
/* initialize GMime */
g_mime_init (0);
/* create a stream around stdout */
stream = g_mime_stream_mem_new_with_buffer(body_part.c_str(), body_part.length());
请参阅doc:http://spruce.sourceforge.net/gmime/tutorial/x49.html 示例:http://fossies.org/linux/gmime/examples/basic-example.c