【问题标题】:Loop through all outlook items, find emails with email bodies containing a certain text遍历所有 Outlook 项目,查找包含特定文本的电子邮件正文的电子邮件
【发布时间】:2020-02-21 14:30:11
【问题描述】:

我们有一个项目正在进行中,基本上它应该做以下事情:

  1. 循环浏览所有 Outlook 项目(主电子邮件帐户及其子文件夹)
  2. 遍历所有 Outlook 项目(用户创建的数据文件(PST 文件)及其子文件夹)
  3. 上述两个循环应排除 Yammer Root、同步问题、联系人和日历文件夹
  4. 查找电子邮件正文包含特定文本(例如 XXX-YY-2020777)的电子邮件,这对我来说是最重要的代码
  5. 在工作表中打印这些:
    • 主文件夹-子文件夹
    • 发件人
    • 电子邮件主题
    • 收到日期

所以我在这里找到了一篇有用的帖子,感谢 Keith Whatling:

Sub GetEmail()

Dim OutApp As Outlook.Application
Dim Namespace As Outlook.Namespace
Dim Mfolder As Outlook.MAPIFolder
Dim myMail As Outlook.Items

Dim Folder As Outlook.MAPIFolder
Dim SubFolder As Outlook.MAPIFolder
Dim UserFolder As Outlook.MAPIFolder

Set OutApp = New Outlook.Application
Set Namespace = OutApp.GetNamespace("MAPI")

On Error Resume Next
For Each Folder In Namespace.Folders
    For Each SubFolder In Folder.Folders
        For Each UserFolder In SubFolder.Folders
            Debug.Print Folder.Name, "|", SubFolder.Name, "|", UserFolder.Name
        Next UserFolder
    Next SubFolder
Next Folder
On Error GoTo 0

End Sub

我可以合并这两个帖子:

https://www.encodedna.com/excel/how-to-parse-outlook-emails-and-show-in-excel-worksheet-using-vba.htm

Excel vba: Looping through all subfolders in Outlook email to find an email with certain subject

但我需要一些指导,这样我才能开始。

【问题讨论】:

    标签: excel vba outlook automation


    【解决方案1】:

    我开始了

    Sub GetEmailTesting()
    
    Dim outlook_app As Outlook.Application
    Dim namespace As Outlook.namespace
    
    Set outlook_app = New Outlook.Application
    Set namespace = outlook_app.GetNamespace("MAPI")
    
    Dim main_folder As Outlook.MAPIFolder
    Dim sub_folder1 As Outlook.MAPIFolder
    Dim sub_folder2 As Outlook.MAPIFolder
    Dim sub_folder3 As Outlook.MAPIFolder
    
    On Error Resume Next
    
    For Each main_folder In namespace.Folders
        ' code goes here
         For Each sub_folder1 In main_folder.Folders
            ' code goes here
            For Each sub_folder2 In sub_folder1.Folders
                ' code goes here
                For Each sub_folder3 In sub_folder2.Folders
                        Dim rowNumber As Integer
                        rowNumber = 2
                        For Each obj_item In sub_folder3.Items
                            If obj_item.Class = olMail Then
                                Dim obj_mail As Outlook.MailItem
                                Set obj_mail = obj_item
                                Cells(rowNumber, 1) = obj_mail.SenderEmailAddress
                                Cells(rowNumber, 2) = obj_mail.To
                                Cells(rowNumber, 3) = obj_mail.Subject
                                Cells(rowNumber, 4) = obj_mail.ReceivedTime
                            End If
                            rowNumber = rowNumber + 1
                        Next
                Next sub_folder3
            Next sub_folder2
        Next sub_folder1
    Next main_folder
    
    On Error GoTo 0
    
    End Sub
    

    我是否必须在每个 FOR EACH 循环中插入它(主文件夹、子文件夹 1、子文件夹 2、子文件夹 3 等等...?

                        For Each obj_item In sub_folder3.Items
                            If obj_item.Class = olMail Then
                                Dim obj_mail As Outlook.MailItem
                                Set obj_mail = obj_item
                                Cells(rowNumber, 1) = obj_mail.SenderEmailAddress
                                Cells(rowNumber, 2) = obj_mail.To
                                Cells(rowNumber, 3) = obj_mail.Subject
                                Cells(rowNumber, 4) = obj_mail.ReceivedTime
                            End If
                            rowNumber = rowNumber + 1
                        Next
    

    【讨论】:

    • 首先,这不是答案,这确实属于您的原始问题。其次,您需要创建一个以文件夹为参数的函数,处理文件夹消息,然后为每个子文件夹递归调用自身。
    • 嗨,德米特里,谢谢。我可以循环浏览所有邮件项目,无论它们是在主文件夹中还是在子文件夹中?
    • 理论上是可以的,如果你建立一个搜索文件夹,在所有文件夹中搜索并等待搜索完成。但你为什么想要?只需递归处理文件夹。
    • 嗨,Dmitry,我是编程新手,不想被勺子喂食,但可能会问一些方向。 CephazOz 提供了一个我可以开始使用的代码,但我无法弄清楚。如果我询问有关更改或编辑内容的更多线索,可以吗?我的另一个帖子是stackoverflow.com/questions/60370414/…
    猜你喜欢
    • 2018-01-02
    • 2010-11-20
    • 1970-01-01
    • 1970-01-01
    • 2011-01-17
    • 2022-11-24
    • 2019-03-31
    • 2013-02-11
    • 2022-08-24
    相关资源
    最近更新 更多