2016-11-01 3 views
1

У меня есть код, который частично заполняет сообщение электронной почты как ответ. Но я не могу получить отправителя, если они не находятся на (нашем/нашем)? сервер обмена.Как получить отправителя сообщения о перспективах

Public Sub CreateMessage() 

Dim EmailFrom As String 
Dim NewMessage As Outlook.MailItem 
Dim OldMessage As Outlook.MailItem 


Set OldMessage = Application.ActiveInspector.CurrentItem 
Set NewMessage = Application.CreateItem(olMailItem) 
EmailFrom = OldMessage.Sender.PropertyAccessor.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x39FE001E") 
NewMessage.Body = Body(EmailFrom) 
NewMessage.HTMLBody = HTMLBody(EmailFrom) 
NewMessage.Recipients.Add (EmailFrom) 
NewMessage.Display 
Set NewMessage = Nothing 

End Sub 

сообщение я получаю это «свойство» http://schemas.microsoft.com/mapi/proptag/0x39FE001E «неизвестно или не может быть найдено.» и он работает только с внутренними сообщениями.

Кто-нибудь знает способ в Outlook VBA, чтобы получить отправителя почтового сообщения, которое работает для всех из них?


Фиксированные на основе комментариев Димитрия:

Public Sub CreateMessage() 

Dim EmailFrom As String 
Dim NewMessage As Outlook.MailItem 
Dim OldMessage As Outlook.MailItem 


Set OldMessage = Application.ActiveInspector.CurrentItem 
Set NewMessage = Application.CreateItem(olMailItem) 
Select Case OldMessage.SenderEmailType 
    Case "EX" 
     EmailFrom = OldMessage.Sender.GetExchangeUser.PrimarySmtpAddress 
    Case Else 
     EmailFrom = OldMessage.SenderEmailAddress 
End Select 
NewMessage.Body = Body(EmailFrom) 
NewMessage.HTMLBody = HTMLBody(EmailFrom) 
NewMessage.Recipients.Add (EmailFrom) 
NewMessage.Display 
Set NewMessage = Nothing 

End Sub 

ответ

3

Вы запрашиваете PR_SMTP_ADDRESS свойства, которое является обмен специфичен. Проверьте, является ли SenderEmailType «EX», и только затем прочитайте свойство PR_SMTP_ADDRESS. В противном случае просто прочитайте свойство MailItem.SenderEmailAddress.

Взгляните на сообщение с OutlookSpy (нажмите «Сообщение»), чтобы просмотреть доступные свойства.

+0

Не могу поверить, что я пропустил это! Благодаря! – John

+0

И в случае Exchange вы можете вместо этого использовать MailItem, Sender.GetExchangeUser.PrimarySmtpAddress (с проверкой нулей, конечно) - PR_SMTP_ADDRESS не гарантируется. –

+0

Просто хотел прокомментировать, что мне нужно проверить SenderEmailType. Если тип «EX», то я должен использовать код, который я разместил, иначе решение Дмитрия отлично работает. – John

Смежные вопросы