exchange-server - 使用 EWS 转发签名的电子邮件失败并显示“未找到指定的对象”
问题描述
我们有一项服务,可以将所有传入 Exchange 服务器的电子邮件转发给特定的团队成员。我们对已签名的电子邮件有 2 个问题 - 从这些邮件中提取附件并转发这些已签名的电子邮件。我们已经解决了使用Mimekit包提取附件的问题。
尝试使用Forward方法转发签名的电子邮件时,失败并出现以下错误:
在商店中找不到指定的对象。无法打开附件。
代码看起来像这样,没什么特别的:
origMessage.Forward(Nothing, forwardToAddress)
这是 EWS 的已知问题吗?提到“打开附件”的错误让我觉得它应该寻找一些实际上不存在的附件 - 邮件中唯一存在的附件是签名smime.7m
。
如果电子邮件未签名,则同一行将正常执行并成功转发电子邮件。由于我们在使用 Mimekit 解决第一个提到的问题方面取得了巨大成功,Mimekit 是否也有助于转发签名的电子邮件?
解决方案
由于我无法正确转发电子邮件,我决定通过基本上发送看起来相同的新消息来“假转发”它。我怀疑问题是我不允许转发的原始邮件中存在证书数据。新创建的电子邮件(显然)不包含此证书。
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
推荐阅读
- google-apps-script - 将二维码从 Google 表格发送到电子邮件地址
- git - 将 master 分支中所有当前未提交的工作移至其他分支
- python - 根到叶算法错误
- python - 在python中的文档上运行循环
- python - 使用 python-gnupg 嵌入文件名
- python - 无法在 python 字典中使用 bash 数组?
- python - 是导入动态还是静态
- spf - 带有 DMARC 的电子邮件:“失败”,即使它来自 https://mxtoolbox.com 验证器
- c++ - 128 位 int 是否在 C/C++ 中的两条指令中写入或加载?
- kubernetes - Kubernetes:PersistentVolume 和 PersistentVolumeClaim - 共享声明