首页 > 解决方案 > 使用 EWS 转发签名的电子邮件失败并显示“未找到指定的对象”

问题描述

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

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

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

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

origMessage.Forward(Nothing, forwardToAddress)

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

如果电子邮件未签名,则同一行将正常执行并成功转发电子邮件。由于我们在使用 Mimekit 解决第一个提到的问题方面取得了巨大成功,Mimekit 是否也有助于转发签名的电子邮件?

标签: exchange-serverexchangewebservicesmimekit

解决方案


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

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

推荐阅读