使用EWS转发签名的电子邮件失败,并显示“找不到指定的对象”

时间:2019-07-22 16:57:09

标签: exchange-server exchangewebservices mimekit

我们有一项服务,可以将传入Exchange服务器的所有电子邮件转发给特定的团队成员。我们对签名电子邮件有两个问题-从这些邮件中提取附件并转发这些签名电子邮件。我们已经解决了使用Mimekit软件包提取附件的问题。

尝试使用Forward方法转发签名的电子邮件时,它失败并显示以下错误:

  

在商店中找不到指定的对象。打不开   附件。

代码看起来像这样,那里没什么特别的:

origMessage.Forward(Nothing, forwardToAddress)

这是EWS的一个已知问题吗?提到“打开附件”时出错,使我觉得它应该寻找一些实际上不存在的附件-消息中唯一存在的附件是签名smime.7m

如果电子邮件未签名,则执行同一行就可以成功转发电子邮件。由于我们在解决Mimekit中第一个提到的问题方面取得了成功,因此 Mimekit对转发已签名的电子邮件是否有帮助?

1 个答案:

答案 0 :(得分:0)

由于我无法正确转发电子邮件,因此我决定通过基本上发送一条看起来相同的新消息来“伪造”它。我怀疑问题是原始邮件中存在证书数据,不允许转发。新创建的电子邮件(显然)不包含此证书。

Private Shared Sub FakeForwardOfSignedEmail(ByRef origMail As EmailMessage, ByVal cc As String, ByRef attachments As List(Of Tuple(Of String, Byte())))
         Dim fakeForward = origMail.CreateForward()
         fakeForward.ToRecipients.Add(cc)
         fakeForward.Subject = "FW: " + origMail.Subject

         Dim body As New MessageBody
         body.Text = "<hr><b>From: </b>" + origMail.Sender.Name + " (" + origMail.Sender.Address + ")<br />"
         body.Text += "<b>Sent: </b>" + origMail.DateTimeSent.ToString + "<br />"
         body.Text += "<b>To: </b>" + origMail.ReceivedBy.Name + " (" + origMail.ReceivedBy.Address + ")<br />"
         body.Text += "<b>Subject: </b>" + origMail.Subject + "<br /><br />"
         body.Text += origMail.Body.ToString
         fakeForward.Body = body

         Dim forwardMsg As EmailMessage = fakeForward.Save()
         For Each att As Tuple(Of String, Byte()) In attachments
            forwardMsg.Attachments.AddFileAttachment(att.Item1, att.Item2)
         Next

         forwardMsg.Send()
      End Sub