This is the answer to the original question.
Place the code inside of '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
This answer took me about three weeks to get. Credit to niton's answer which helped me get to this one.
Using this method allows you to adjust the .SentOnBehalfOfName property before the email is displayed to the user. As opposed to the Application_ItemSend method which changes the .SentOnBehalfOfName property after the user clicks 'Send'.
Note, the .SentOnBehalfOfName property needs to be adjusted before the email is displayed to the user.
You cannot adjust much in the Application_ItemLoad method which is my you need to use 'myItem' to copy 'Item', perform your logic, then copy 'myItem' to 'copiedItem', then set the copiedItem.SentOnBehalfOfName property, and then finally use .Display to display 'copiedItem' to the user.