如何解决有没有办法像 MailItem.Reply 一样在 RDOMMail.Reply 中保留签名?
我尝试使用 RDOMMail.Reply 方法获取对邮件的回复。 但是,在检查返回的对象后,我注意到签名不是 HTMLBody 属性的一部分,就像使用方法 MailItem.Reply 时一样(我没有使用它,因为它抛出 0x80004004 (E_ABORT) 异常)。此外,如果签名包含图像,则签名所需的附件不会像 MailItem.Reply 那样保留。 我尝试使用 Signature 对象单独应用签名。这会向 HTMLBody 添加签名,但不使用 _MailAutoSig 属性来标记签名部分,因此如果我从 Outlook 功能区中选择“更改签名”,签名不会被替换,因为 Outlook 无法知道它是签名。
有没有办法从包含 Outlook 知道如何替换的签名的 RDOMMail 获取回复?
var rdoMail = session.GetMessageFromID(entryid);
var reply = rdoMail.Reply();
reply.HTMLBody = "";
var Account = session.Accounts.Getorder(rdoAccountCategory.acMail).Item(1);
var signature = Account.ReplySignature;
signature.ApplyTo(reply,false);
reply.Save();
解决方法
这是处理扩展 MAPI 代码时的一个已知问题/案例,它仅与兑换无关。有关详细信息,请参阅 Messages that are created outside Outlook do not include the default Outlook email signature。
您的选择是:
- 通过向邮件正文添加所有必要的部分(如
_MailAutoSig
属性)来模仿 Outlook 行为。 - 将 Outlook 对象模型与 Reply 方法结合使用,然后使用
GetRDOObjectFromOutlookObject
方法获取等效的 Redemption。但据我所知,看看你得到的异常,这是不可能的,因为代码是从辅助线程中使用的,对吗? - 您可以使用其 RDOAccount 对象(可以使用任何语言访问,包括 VBA)。新消息签名名称存储在
0x0016001F
属性中,回复签名存储在0x0017001F
中。 您还可以使用 RDOAccount.ReplySignature
和NewSignature
属性。
Redemption 还公开 RDOSignature.ApplyTo
方法,该方法采用指向 RDOMail 对象的指针并在指定位置插入签名,正确合并图像和样式:
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Drafts = Session.GetDefaultFolder(olFolderDrafts)
set Msg = Drafts.Items.Add
Msg.To = "user@domain.demo"
Msg.Subject = "testing signatures"
Msg.HTMLBody = "<html><body>some <b>bold</b> message text</body></html>"
set Account = Session.Accounts.GetOrder(2).Item(1) 'first mail account
if Not (Account Is Nothing) Then
set Signature = Account.NewMessageSignature
if Not (Signature Is Nothing) Then
Signature.ApplyTo Msg,false 'apply at the bottom
End If
End If
Msg.Send
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。