我正在使用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);
}
}
}
答案 0 :(得分:0)
Outlook将签名/加密邮件表示为常规MailItem对象。必须对该对象进行所有更改。
将忽略对实际(在MAPI级别上)消息的更改。
尝试使用rdoSession.GetRDOObjectFromOutlookObject,而不是使用rdoSession.GetMessageFromID。