Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Email 发送经赎回修改的数字签名邮件_Email_Digital Signature_Outlook Redemption - Fatal编程技术网

Email 发送经赎回修改的数字签名邮件

Email 发送经赎回修改的数字签名邮件,email,digital-signature,outlook-redemption,Email,Digital Signature,Outlook Redemption,我正在使用Outlook加载项,它在发送邮件之前修改发送邮件并添加自定义附件。兑换非常简单,在发送普通邮件时效果很好 当邮件由证书进行数字签名时,问题出现。在这种情况下,会自动附加文件smime.p7s(它可以作为RDOAttachment读取),添加另一个自定义附件,修改并发送消息。但是,收件人收到的邮件没有这些修改,也没有自定义附件 在Send方法中执行哪些操作?数据签名时是否有任何保护?关于如何修改数据和发送附件,是否有任何解决方案?您可能会反对修改已经签名的数据是胡说八道,但相信我,我有

我正在使用Outlook加载项,它在发送邮件之前修改发送邮件并添加自定义附件。兑换非常简单,在发送普通邮件时效果很好

当邮件由证书进行数字签名时,问题出现。在这种情况下,会自动附加文件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);
        }
    }
}
void Application\u ItemSend(对象项,ref bool Cancel)
{
Outlook.MailItem MailItem=作为Outlook.MailItem的项目;
if(mailItem!=null)
{
Save();
如果(mailItem.EntryID!=“”)
{
//获取RDOMail
RDOSession RDOSession=新RDOSession();
rdoSession.MAPIOBJECT=Application.Session.MAPIOBJECT;
RDOMail RDOMail=rdoSession.GetMessageFromID(mailItem.EntryID);
//获取有关附件的信息(例如smime.p7s)
foreach(rdoMail.Attachments中的RDOAtAttachment附件)
{
System.Windows.Forms.MessageBox.Show(附件.FileName);
}
//修饰体
rdoMail.HTMLBody=“测试”;
//添加一些自定义附件
字节[]数据=新字节[]{0x01,0x02,0x03,0x04};
RDOAttachment att=rdoMail.Attachments.Add(数据);
att.FileName=“attachment.bin”;
//发送修改过的邮件
rdoMail.Save();
rdoMail.Send();
//不要发送原始邮件
取消=真;
mailItem.GetInspector.Close(Outlook.OlInspectorClose.olDiscard);
}
}
}

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

对实际(MAPI级别)邮件的更改将被忽略

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