Показать сообщение отдельно
Старый 11.06.2008, 17:28   #3  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Чем не очень удобен Outlook в плане программирования, так это тем, что пустяшную тестовую задачку там запустишь не сразу. Пока разберешься со всеми этими фолдерами, инспекторами и эксплорерами...

Приведенная по ссылке процедура заимствована из очень полезной книги Сью Мошер (есть русское издание: http://www.books.ru/shop/books/205770, которое я имел удовольствие почитывать). Я подправил процедуру так, чтобы ее можно было запускать в Outlook и смотреть на результаты (чтобы потом проще воплощалось в X++).

Для запуска надо скопировать текст в модуль VBA (находясь в Outlook, нажать Alt+F11). Далее следует открыть любое письмо, затем перейти в редактор VBA и, стоя на тексте процедуры, нажать F5. Процедура последовательно вернет имя отправителя, тело письма и, наконец, желаемый адрес.

Код:
'код - VBA для тестового запуска внутри Outlook

Sub GetFromAddress()
    
    Dim myInspector As Inspector
    Dim myItem As MailItem
    
    Dim objSession As Object
    Dim strEntryID As String
    Dim strStoreID As String
    Dim objCDOMsg As Object
    Dim strAddress As String
    
    Set myItem = Application.ActiveInspector.CurrentItem

  ' start CDO session
    Set objSession = CreateObject("MAPI.Session")
    objSession.Logon "", "", False, False

  ' pass message to CDO
    strEntryID = myItem.EntryID
    strStoreID = myItem.Parent.StoreID
    Set objCDOMsg = objSession.GetMessage(strEntryID, strStoreID)

  ' get sender address
    On Error Resume Next
    strAddress = objCDOMsg.Sender.Address
    If Err = &H80070005 Then
    'handle possible security patch error
    MsgBox "The Outlook E-mail and CDO Security Patches are " & _
           "apparently installed on this machine. " & _
           "You must response Yes to the prompt about " & _
           "accessing e-mail addresses if you want to " & _
           "get the From address.", vbExclamation, _
           "GetFromAddress"
    End If

    MsgBox myItem.SenderName
    MsgBox myItem.Body

    MsgBox strAddress
  
    Set objCDOMsg = Nothing
    objSession.Logoff
    Set objSession = Nothing

End Sub