改变" From"的最好方法在Outlook的VBA脚本中收到的电子邮件地址?

时间:2015-07-31 13:33:16

标签: vba outlook

我的总体目标是改变" From"发件人收到的电子邮件到其他东西。具体来说,我从Zopim聊天中获取聊天记录,他们都来自Zopim" no-reply"电子邮件。但是,我希望这些聊天记录与我的CRM相关联,因此我希望它们与我们聊天的人相关联。

我已经创建了这个VBA脚本,它运行时没有错误,但是,没有对传入的电子邮件进行任何更改。我做错了什么?

    Option Explicit

Sub ZopimChatMessageRule(Item As Outlook.MailItem)
    Dim body As String
    Dim sndr As String

    On Error GoTo Finally
    body = Trim(Right(Item.body, Len(Item.body) - (InStrRev(Item.body, "EMAIL") + 5)))
    sndr = Trim(Left(body, InStr(body, vbCrLf) - 1))

    Item.sender.Address = sndr
    Item.sender.Name = sndr
    Item.sender.Update

    Item.Recipients.ResolveAll
    Item.Save

Finally:

End Sub

1 个答案:

答案 0 :(得分:1)

您的代码正在更新任何地方都不存在的一次性地址条目的名称和地址。您需要做的是更改Sender和SentOnBehalfOf属性,这些属性在Outlook对象模型中是只读的。

您可以使用MailItem.PropertyAccessor.SetProperty更新十几个PR_SENDER_xyz和PR_SENT_REPRESENTING_xyz MAPI属性 - 查看带有OutlookSpy的消息(单击IMessage按钮)。

如果使用Redemption是一个选项,您可以直接设置Sender和SentOnBehalfOf属性:

set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
set Msg = Session.GetRDOObjectFromOutlookObject(Item )
strEntryID = Session.AddressBook.CreateOneOffEntryID("Fake User", "SMTP", "someuser@fake.domain.com", false, true)
set addressEntry = Session.AddressBook.GetAddressEntryFromID(strEntryID)
Msg.Sender = addressEntry
Msg.SentOnBehalfOf = addressEntry
Msg.Save