Создать mimetic::MimeEntity из электронной почты std::string из учетной записи POP3

В настоящее время я пытаюсь прочитать некоторые письма из учетной записи POP3 Gmail, и для этой задачи я использовал библиотеку libCurl. Я создал std::list m_mailsInbox, в котором хранится индекс для каждого электронного письма в этой учетной записи.

Как видите, я извлекаю содержимое этого списка, используя упомянутый индекс, и читаю каждое письмо, которое я храню в std::string dataEmail. Внутри этой переменной у меня есть заголовок и тело письма, и мне нужно создать объект MimeEntity с помощью миметической библиотеки.

Это мой текущий код:

void MailServer::ReadMails(char *username,char *password)
{
    //fetchs into the list one by one
    for(std::list<MailInbox>::iterator it = m_mailsInbox.begin(); it != m_mailsInbox.end(); ++it)   
    {
        struct MemoryStruct chunkMail;
        chunkMail.memory = (char*) malloc(1);  //it will grow as necessary
        chunkMail.size = 0;    //there's no data at this point

        curl_easy_setopt(handle,CURLOPT_USERNAME,username);
        curl_easy_setopt(handle,CURLOPT_PASSWORD,password);

        m_popsAccount = "pop3s://pop.gmail.com:995/" + it->index;   //creates the URL for the email it->index (i.e: 1)

        curl_easy_setopt(handle, CURLOPT_URL, m_popsAccount.c_str());
        curl_easy_setopt(handle, CURLOPT_USE_SSL, CURLUSESSL_ALL); 
        curl_easy_setopt(handle, CURLOPT_SSL_VERIFYPEER, 0); 
        curl_easy_setopt(handle, CURLOPT_SSL_VERIFYHOST, 0); 
        curl_easy_setopt(handle, CURLOPT_HEADER, 1); 
        curl_easy_setopt(handle, CURLOPT_WRITEFUNCTION, WriteMemoryCallback);
        curl_easy_setopt(handle, CURLOPT_VERBOSE, 1); 

        curl_easy_setopt(handle, CURLOPT_WRITEDATA, (void *)&chunkMail);
        //some servers needs this validation
        curl_easy_setopt(handle, CURLOPT_USERAGENT, "libcurl-agent/1.0");

        res = curl_easy_perform(handle); 
        if(res != CURLE_OK)
        {
            fprintf(stderr, "curl_easy_perform() failed: %s\n",
                curl_easy_strerror(res));
        }
        else //everything was fine
        {
            printf("%s\n",chunkMail.memory); //here is the information of the email

            if(ReadMailHeader(chunkMail.memory))
            {
                std::string dataEmail = chunkMail.memory;
                //if returns true, the mail must be saved
                MimeEntity mime; 
                //how i create this object using dataEmail string??                 
            }           
        }

        //frees the data inside
        if(chunkMail.memory)
            free(chunkMail.memory);
    }
}

Какие-либо предложения?


person Mauro Bilotti    schedule 08.11.2013    source источник
comment
Фу; ручное управление памятью. tinyurl.com/so-cxxbooks   -  person rightfold    schedule 08.11.2013


Ответы (1)


                std::istringstream ss(std::string(chunkMail.memory,m_mailsInbox.at(i).size));

                ios_base::sync_with_stdio(false);   

                //si la funcion retorno true, entonces hay que guardar los datos
                MimeEntity me(ss); 

этого достаточно для этого! :)

person Mauro Bilotti    schedule 11.11.2013