使用vmime修改电子邮件-无需将零件保存到磁盘

时间:2018-09-12 11:49:25

标签: email email-parsing vmime

Stackoverflow的同胞们,我希望你们都心情愉快,以免打败我的问题:)

免责声明:我曾在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 个答案:

没有答案