Использование vmime для изменения электронной почты - без сохранения частей на диск

Товарищи из Stackru, надеюсь, у вас все в хорошем настроении, чтобы не понизить мой вопрос:)

Отказ от ответственности: я задавал тот же вопрос на форумах vmime, но не получил ответа, поэтому снова пишу здесь.

Постановка проблемы:

Я использую vmime, чтобы попытаться проанализировать вложенные документы и электронные письма, чтобы внести некоторые изменения в прикрепленные электронные письма. В этом сценарии я хочу иметь возможность изменять электронные письма на лету, возможно, копируя ссылки bodyparts/body в другое сообщение и меняя соответствующие заголовки.

Текущее состояние: я могу прочитать электронное письмо, разобрать его содержимое и расшифровать, если в нем есть электронное письмо с вложением.

Это фрагмент кода:

###########################################################################
/**
is called recursivels, for all the body parts that have to
be processed
**/
int32_t
ProcessAttachmentPart(std::shared_ptr<vmime::bodyPart> inBodyPart,
                      std::shared_ptr<vmime::bodyPart> outBodyPart,
                      int32_t depth)
{

auto header = inBodyPart->getHeader();
if (header->hasField(vmime::fields::CONTENT_TYPE))
{

    auto field = header->getField(std::string(vmime::fields::CONTENT_TYPE));
    auto partType = field->getValue()->generate();
    if (partType == "message/rfc822" == 0)
    {
        /**
            ---------------> problem here <-----------------
            If this is a sub-message, I have not parsed this message
            when I called Message::parse() somewhere before.
            How to I get a handle to this message now???
        **/

        ApplyBodyTransformation( inBodyPart->getBody(),
                                 outBodyPart->getBody());
    }
    else
    {
        CopyBodyPart(inBodyPart, outBodyPart);
    }
}
else
{
    CopyBodyPart(inBodyPart, outBodyPart);
}
ProcessHeaders(inBodyPart, outBodyPart);
return 0;
}


int32_t
ApplyBodyTransformation(const std::shared_ptr<vmime::body> inBody,
                        std::shared_ptr<vmime::body> outBody)
{
    for (auto part : inBody->getPartList())
    {
        std::shared_ptr<vmime::bodyPart> outBodyPart(new vmime::bodyPart);
        ProcessAttachmentPart(part, outBodyPart,depth);
        outBody->appendPart(outBodyPart);
    }
    return 0;
}

Что я мог сделать- это вызвать функцию inBodyPart->generate() - прочитать файл в новое сообщение - разобрать и прикрепить новое сообщение к окончательному сообщению.

То, что я хочу сделать, это НЕ писать этот дополнительный файл..

Я не могу найти какой-либо такой API в коде. Любая помощь будет оценена.

0 ответов

Другие вопросы по тегам