【问题标题】:How to retrieve SenderEmailAddress from each mail item in an Outlook folder?如何从 Outlook 文件夹中的每个邮件项中检索 SenderEmailAddress?
【发布时间】:2017-02-14 17:54:14
【问题描述】:

我正在尝试从收件箱文件夹中的每封电子邮件中提取发件人的电子邮件地址

在我为文件夹中的每封电子邮件使用For 命令之前,我没有任何问题。

如果我使用现在的代码,我会遇到错误,因为 olSender 不是 Dim As Variant,但如果我将其更改为 Dim As Variant 我不能将 Dim 它作为Outlook.MailItem 检索senderEmailAddress

我假设嵌套的For 循环是解决方案。 Outlook 2013 是版本。

Sub ExportToExcel()
    'EXCEL
    'Opening Excel workbook
     
    Dim oXLApp As Object, oXLwb As Object, oXLws As Object
    Dim lRow As Long
    
    On Error Resume Next
    Set oXLApp = GetObject(, "Excel.Application")
    
    '~~> If not found then create new instance
    If Err.Number <> 0 Then
        Set oXLApp = CreateObject("Excel.Application")
    End If
    Err.Clear
    On Error GoTo 0
        
    oXLApp.Visible = True
    
    Set oXLwb = oXLApp.Workbooks.Open("C:\Users\******\Documents\******.xlsm")
    Set oXLws = oXLwb.Sheets("Sheet1")
    
    oXLws.Range("A" & 1).Select
    'OUTLOOK
     
    'Opening Outlook folder
     
    Dim olNS As Outlook.NameSpace
    Dim objOwner As Outlook.Recipient
       
    Set olNS = Application.GetNamespace("MAPI")
    Set objOwner = olNS.CreateRecipient("*********@email.com")
    objOwner.Resolve
           
    If objOwner.Resolved Then
        Set BouncedEmailsFolder = olNS.GetSharedDefaultFolder(objOwner, olFolderInbox).Folders("Bounced Emails")
    End If
     
    Dim olItms As Outlook.Items
    Dim olMail As Variant
    Dim i As Long
    Dim olSender As Outlook.MailItem
    
    Set olItms = BouncedEmailsFolder.Items
     
    olItms.Sort ("Subject")
    
    i = 1
    
    For Each olSender In olItms
        oXLws.Select
        oXLws.Cells(i, 1).Select
        oXLws.Cells(i, 1).Value = olSender.SenderEmailAddress
        i = i + 1
    Next olSender
    
    Set BouncedEmailsFolder = Nothing
    Set olNS = Nothing
    
End Sub

【问题讨论】:

  • 每次尝试If Item.Class = olMail Then

标签: excel vba outlook


【解决方案1】:

设置为我的默认收件箱时,您的代码对我有效。 olNS.GetDefaultFolder(olFolderInbox)

我想知道您是否没有在退回的电子邮件中遇到非邮件项目?您可能想尝试下面的代码,它只会检索邮件项目(而不是尝试提取发件人以进行会议请求、任务分配等):

  For Each olSender In olItms
        If TypeOf olSender Is MailItem Then
            oXLws.Select
            oXLws.Cells(i, 1).Select
            oXLws.Cells(i, 1).Value = olSender.SenderEmailAddress
            i = i + 1
        End If
     Next olSender

【讨论】:

  • 感谢您回答瑞恩。我尝试了您的代码,但是一旦代码到达 Next olSender,我仍然会遇到问题。当我将 olSender 调暗为 Variant 时,我不再遇到 Next olSender 的问题,但是我遇到了问题,因为我调暗为 Variant 它也不能调暗为 Outlook.MailItem。
  • 我刚刚在我自己的默认文件夹收件箱中试了一下,它成功了。感谢您的帮助。
  • 您可以将 BouncedEmailsFolder 中的未知项目声明为 Objects,而不是 Variant。一旦您确定 TypeOf 项目是一个邮件项目,您就可以查看对该 TypeOf 项目有效的属性。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-15
  • 2013-05-26
  • 1970-01-01
  • 2018-09-05
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多