发送由Redemption修改的经过数字签名的邮件

时间:2014-09-12 17:58:42

标签: email digital-signature outlook-redemption

我正在使用Outlook加载项修改外发邮件,并在发送之前添加自定义附件。使用Redemption非常容易,在发送普通邮件时效果很好

当证书通过数字签名时,问题会显示为。在这种情况下,文件smime.p7s会自动附加(可以读作RDOAttachment),添加另一个自定义附件并修改和发送消息。但是,收件人会在没有这些修改且没有自定义附件的情况下获取邮件

在Send方法中执行了哪些操作?签署数据时是否有任何保护?有没有关于如何修改数据和发送附件的解决方案?您可能会提出异议,认为修改已签名的数据是无稽之谈,但请相信我,我有充分的理由这样做。

C#示例代码如下:

void Application_ItemSend(object Item, ref bool Cancel)
{
    Outlook.MailItem mailItem = Item as Outlook.MailItem;

    if (mailItem != null)
    {
        mailItem.Save();

        if (mailItem.EntryID != "")
        {
            // get RDOMail
            RDOSession rdoSession = new RDOSession();
            rdoSession.MAPIOBJECT = Application.Session.MAPIOBJECT;
            RDOMail rdoMail = rdoSession.GetMessageFromID(mailItem.EntryID);

            // get info about attachments (e.g. smime.p7s)
            foreach (RDOAttachment attachment in rdoMail.Attachments)
            {
                System.Windows.Forms.MessageBox.Show(attachment.FileName);
            }

            // modify body
            rdoMail.HTMLBody = "<html><body>test</body></html>";

            // add some custom attachment
            byte[] data = new byte[] { 0x01, 0x02, 0x03, 0x04 };
            RDOAttachment att = rdoMail.Attachments.Add(data);
            att.FileName = "attachment.bin";

            // send modified mail
            rdoMail.Save();
            rdoMail.Send();

            // do not send original message
            Cancel = true;
            mailItem.GetInspector.Close(Outlook.OlInspectorClose.olDiscard);
        }
    }
}

1 个答案:

答案 0 :(得分:0)

Outlook将签名/加密邮件表示为常规MailItem对象。必须对该对象进行所有更改。

将忽略对实际(在MAPI级别上)消息的更改。

尝试使用rdoSession.GetRDOObjectFromOutlookObject,而不是使用rdoSession.GetMessageFromID。