如何从字符串创建新的 GMimeMessage?

How to create new GMimeMessage from string?

在我的项目中,我将 libgmime 用于 MIME 类型。我正在尝试使用 std::string 作为主体创建新的 GMimeMessage。 根据文档,可以使用 GMimeStreamGMimeDataWrapper 来准备数据,然后从中创建 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());

也许我使用了错误的消息创建方法... 正确的做法是什么?

您的初始化错误 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()); 

参见文档:http://spruce.sourceforge.net/gmime/tutorial/x49.html 和样本:http://fossies.org/linux/gmime/examples/basic-example.c