Member 11998490 Ответов: 1

Как я могу найти отправленную почту с помощью vba?


Привет,
Я работаю над приложением access и пытаюсь отправить письмо с приложенным отчетом. Затем я хочу восстановить эту отправленную почту и отобразить ее. Но я не могу сделать это с помощью свойства EntryId, потому что этот ключ меняется каждый раз, когда он перемещается из outbox в mailsent box.
Кто-нибудь может мне помочь?
Спасибо.

1 Ответов

Рейтинг:
0

Trekkie_RIF

Да, вы правы, EntryID меняется.
Я использовал идентификатор сообщения, но вы можете увидеть/получить его только в заголовке сообщения.

Public OlSentFolder As Outlook.Folder ' Global variable

Dim olPA As Outlook.PropertyAccessor
Dim messageID as String
Dim myOutlook As Outlook.Application
Dim olNamespace As Outlook.NameSpace

Set myOutlook = GetObject(, "Outlook.Application")
Set olNamespace = myOutlook.GetNamespace("MAPI")
Set OlSentFolder = olNamespace.GetDefaultFolder(olFolderSentMail)

' get the PropertyAccessor
' i is the index of the mail message you are working with
Set olPA = olSentFolder.Items(i).PropertyAccessor
' Message-ID, specified by RFC 2822
' cannot use EntryID - it changes
messageID = olPA.GetProperty("http://schemas.microsoft.com/mapi/proptag/0x1035001E")	

Идентификатор сообщения будет выглядеть примерно так: <008401cef84c$5a2d3c40$0e87b4c0$@company.com>

Вот некоторые примеры кода, чтобы получить сообщение, код сообщения:
Function GetEmailItemByID(id As String) As Outlook.MailItem
    Dim findItems As Outlook.Items
    Dim query As String
    
    query = "@SQL=""http://schemas.microsoft.com/mapi/proptag/0x1035001E"" = '" & id & "'"
    ' get email object by message ID
    Set findItems = OlSentFolder.Items.Restrict(query)
    If findItems.Count <> 1 Then
        Debug.Print "Something is wrong - MessageID not found or >1 found."
    Else
        Set GetEmailItemByID = findItems.Item(1)
    End If
End Function


Tony Hill

Маловероятно, что оригинальный плакат все еще интересует, так как этому вопросу уже 5 лет.