如何在VBA中的Outlook-2007中的“已发送邮件”文件夹中获取邮件标识或标头

时间:2013-01-28 06:48:16

标签: vba outlook outlook-2007

这是此main问题的子问题

我可以使用以下功能循环获取其他文件夹的互联网标题

Sub testing()
Dim ns As Outlook.NameSpace
Dim folder As MAPIFolder
 Dim item As MailItem
Set ns = Session.Application.GetNamespace("MAPI")
Set folder = ns.GetDefaultFolder(olFolderInbox)

 For Each item In folder.Items

    If (item.Class = olMail) Then
        GetInetHeaders item
    End If
Next item

End Sub

Function GetInetHeaders(olkMsg As MailItem) As String

    ' Purpose: Returns the internet headers of a message.'

    ' Written: 4/28/2009'

    ' Author:  BlueDevilFan'

    ' Outlook: 2007'

    Const PR_TRANSPORT_MESSAGE_HEADERS = "http://schemas.microsoft.com/mapi/proptag/0x007D001E"

    Dim olkPA As Outlook.PropertyAccessor

   Set olkPA = olkMsg.PropertyAccessor

    GetInetHeaders = olkPA.GetProperty(PR_INTERNET_MESSAGE_ID)

    Debug.Print olkMsg.Subject
    Debug.Print GetInetHeaders


    Set olkPA = Nothing

End Function

但是没有处理“已发送邮件”文件夹,任何人都有这方面的经验或参考?

失败该属性不返回任何内容

Sub testing2()
Dim item As MailItem
Set Store = Application.GetNamespace("MAPI").Folders
  For Each StoreFolder In Store

      For i = 1 To StoreFolder.Folders.Count
        If StoreFolder.Folders(i).Name = "Sent Items" Then
            For Each item In StoreFolder.Folders(i).Items
                If (item.Class = olMail) Then
                    GetInetHeaders item
                End If
            Next item
            Exit For
        End If
      Next
    Exit For

  Next
End Sub

编辑如果无法实现,我可以在电子邮件中自行BCC。

1 个答案:

答案 0 :(得分:5)

PR_TRANSPORT_MESSAGE_HEADERS仅适用于从POP3帐户收到的邮件。它永远不会在传出消息上设置。 此外,绝对没有理由循环遍历所有文件夹 - 使用Application.Session.GetDefaultFolder(olFolderSentMail) - 即使“已发送项目”文件夹名称已本地化,它也将起作用。 其次,您真的需要处理文件夹中的所有项吗?

检查是否设置了PR_INTERNET_MESSAGE_ID(DASL名称schemas.microsoft.com/mapi/proptag/0x1035001F)属性。