2015-03-16 1 views
1

В моем проекте я использую libgmime для MIME-типов. Я пытаюсь создать новый GMimeMessage, используя std :: string как тело. Согласно документации это может быть сделано с помощью GMimeStream и GMimeDataWrapper для подготовки данных, а затем создать GMimePart из этих данных, чтобы установить, как MIME часть нового сообщения. Код:Как создать новый GMimeMessage из строки?

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()); 

Может быть, я использую неправильный метод создания сообщений ... Как правильно это можно сделать?

ответ

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()); 

См документ: http://spruce.sourceforge.net/gmime/tutorial/x49.html И пример: http://fossies.org/linux/gmime/examples/basic-example.c

+0

спасибо, что помогли. – Yaroslav