2014-09-12 50 views
0

我正在使用Outlook加載項修改傳出郵件並在發送之前添加自定義附件。使用Redemption和它很容易在發送普通郵件時正常工作。發送由Redemption修改的數字簽名郵件

問題出現當郵件是由證書數字簽署。在這種情況下,會自動附加文件smime.p7s(可將其讀作RDOAttachment),添加另一個自定義附件並修改併發送消息。但是,收件人收到的郵件沒有這些修改,也沒有自定義附件

發送方法中執行了哪些操作?數據簽署時是否有任何保護?有關於如何修改數據併發送附件的解決方案嗎?您可能會提出反對意見,認爲修改已簽署的數據是無稽之談,但請相信我,我有充分理由這樣做。

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

展望表示簽名/加密消息作爲常規的MailItem對象。所有的更改都必須針對該對象進行。

對實際(在MAPI級別上)消息的更改將被忽略。

而不是使用rdoSession.GetMessageFromID,嘗試使用rdoSession.GetRDOObjectFromOutlookObject。

相關問題