Товарищи из Stackoverflow, надеюсь, вы все в хорошем настроении, чтобы не понижать мой вопрос :) 1001 *
Отказ от ответственности: я задавал тот же вопрос на форумах 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 в коде ..
Любая помощь будет оценена.