这是原始问题的答案。
将代码放在“ThisOutlookSession”中
Option Explicit
Public WithEvents myItem As Outlook.MailItem
Public EventsDisable As Boolean
Private Sub Application_ItemLoad(ByVal Item As Object)
'https://stackoverflow.com/questions/21727768/rule-that-runs-macro-when-an-email-is-opened
If EventsDisable = True Then Exit Sub
If Item.Class = olMail Then
Set myItem = Item
End If
End Sub
Private Sub myItem_Open(Cancel As Boolean)
On Error Resume Next
Dim copiedItem As MailItem
Set copiedItem = myItem.Copy
copiedItem.SentOnBehalfOfName = "someone@someplace.com"
copiedItem.Display
Cancel = True 'This cancels 'myItem' from opening for the user because we only want 'copiedItem' to open.
End Sub
我花了大约三个星期才得到这个答案。归功于 niton 的回答,它帮助我得到了这个答案。
使用此方法,您可以在向用户显示电子邮件之前调整 .SentOnBehalfOfName 属性。与在用户单击“发送”后更改 .SentOnBehalfOfName 属性的 Application_ItemSend 方法相反。
请注意,在向用户显示电子邮件之前,需要调整 .SentOnBehalfOfName 属性。
您无法在 Application_ItemLoad 方法中进行太多调整,您需要使用“myItem”来复制“Item”,执行您的逻辑,然后将“myItem”复制到“copiedItem”,然后设置copyedItem.SentOnBehalfOfName 属性,然后最后使用.Display 向用户显示“复制项目”。