我们有一项服务,可以将传入Exchange服务器的所有电子邮件转发给特定的团队成员。我们对签名电子邮件有两个问题-从这些邮件中提取附件并转发这些签名电子邮件。我们已经解决了使用Mimekit软件包提取附件的问题。
尝试使用Forward方法转发签名的电子邮件时,它失败并显示以下错误:
在商店中找不到指定的对象。打不开 附件。
代码看起来像这样,那里没什么特别的:
origMessage.Forward(Nothing, forwardToAddress)
这是EWS的一个已知问题吗?提到“打开附件”时出错,使我觉得它应该寻找一些实际上不存在的附件-消息中唯一存在的附件是签名smime.7m
。
如果电子邮件未签名,则执行同一行就可以成功转发电子邮件。由于我们在解决Mimekit中第一个提到的问题方面取得了成功,因此 Mimekit对转发已签名的电子邮件是否有帮助?
答案 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