2016-11-01 108 views
1

電子メールメッセージを部分的に返信するコードがあります。しかし、送信者がいない場合(私たち/私たち)、送信者を得ることができませんか?交換サーバー。Outlookメッセージの送信者を取得する方法

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ですべてのメールメッセージの送信者を取得する方法を知っていますか?

のDimitryのコメントに基づいて固定

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

あなたがExchange固有のPR_SMTP_ADDRESSプロパティを、要求しています。 SenderEmailTypeが「EX」であることを確認してから、PR_SMTP_ADDRESSプロパティを読んでください。それ以外の場合は、MailItem.SenderEmailAddressプロパティを読んでください。

OutlookSpy(IMessageをクリック)でメッセージを見て、利用可能なプロパティを確認してください。

+0

私はそれを逃したとは思わない!ありがとう! – John

+0

・交換の場合は、あなたが(もちろん、ヌルをチェックして)の代わりにMailItem、Sender.GetExchangeUser.PrimarySmtpAddressを使用することをお勧めします - PR_SMTP_ADDRESSが利用可能であることが保証されていません。 –

+0

SenderEmailTypeをチェックする必要があるとコメントしたかっただけです。タイプが「EX」の場合、私が投稿したコードを使用する必要があります。そうしないと、ドミトリーのソリューションは完全に機能します。 – John

関連する問題