使用VBA发送消息时,在Outlook中更改"Item.To"值

Abd*_*lah 5 outlook vba outlook-vba

我正在尝试在用户按下发送按钮时更改Outlook中"发送至"字段中的电子邮件地址.例如,如果当前Item.To值= 'aaa@example.com'它变为'bbb@example.com'.

我可以改变主题,但是没有使用Item.To(是安全问题吗?):

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

   If Item.Class <> olMail Then Exit Sub

   Item.To = "bbb@example.com"  ' Nope , It does not work
   Item.Subject = "New Subject" ' It works

End Sub
Run Code Online (Sandbox Code Playgroud)

谢谢

joe*_*hwa 6

MailItem.To属性仅用于显示名称.您可能希望使用Recipients集合,就像在Outlook的MailItem.Recipients属性帮助中略微修改的示例一样:

Sub CreateStatusReportToBoss()

 Dim myItem As Outlook.MailItem
 Dim myRecipient As Outlook.Recipient

 Set myItem = Application.CreateItem(olMailItem)
 Set myRecipient = myItem.Recipients.Add("bbb@example.com")
 myItem.Subject = "New Subject"
 myItem.Display

End Sub
Run Code Online (Sandbox Code Playgroud)


Abd*_*lah 5

我是问题所有者.我选择了@joeschwa的答案,但我也希望显示取消当前消息并创建新消息的代码(您可以更改收件人,消息内容和其他任何内容):

Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)

   If Item.Class <> olMail Then Exit Sub
   Dim newEm As String

   Dim Rec As Recipient
        Dim myItem As Outlook.MailItem
        Dim myRecipient As Outlook.Recipient
        Set myItem = Application.CreateItem(olMailItem)
        myItem.Body = Item.Body
        myItem.HTMLBody = Item.HTMLBody
        myItem.Subject = Item.Subject & " RASEEL PLUGIN "
        Cancel = True


   For Each Rec In Item.Recipients
    If InStr(1, Rec.AddressEntry, "@example.com", vbTextCompare) Then
        newEm = "example@example.net"
    Else
        newEm = Rec.AddressEntry
   End If

    Set myRecipient = myItem.Recipients.Add(newEm)
    myRecipient.Type = Rec.Type

   Next

   myItem.Send

End Sub
Run Code Online (Sandbox Code Playgroud)