从未读项目下载附件,并且来自特定发件人



我想从未读的电子邮件中下载所有附件,这些附件既未读又从MS Outlook中的特定发件人接收

我找到了一个代码,它从所有未读电子邮件中下载所有附件。从MS Outlook的未读电子邮件下载附件并尝试对其进行调整。

但是,过滤器无法正常工作。它表明没有这样的电子邮件。

Filter = "[Unread] = True And [SenderEmailAddress] = 'yrybchuk@gmail.com'"

以下是整个代码:

Option Explicit
Public Sub Example()
Dim oOlAp As Object
Dim olNs As Outlook.Namespace
Dim Inbox As Outlook.MAPIFolder
Dim Items As Outlook.Items
Dim Item As Outlook.MailItem
Dim Atmt As Attachment
Dim Filter As String
Dim FilePath As String
Dim AtmtName As String
Dim i As Long
'// Set Inbox Reference
Set oOlAp = GetObject(, "Outlook.application")
Set olNs = oOlAp.GetNamespace("MAPI")
Set Inbox = olNs.GetDefaultFolder(olFolderInbox)
FilePath = "C:UsersirybchukDocuments"
Filter = "[Unread] = True And [SenderEmailAddress] = 'yrybchuk@gmail.com'"
Set Items = Inbox.Items.Restrict(Filter)
'// Loop through backwards
For i = Items.Count To 1 Step -1
    Set Item = Items.Item(i)
    DoEvents
    If Item.Class = olMail Then
        Debug.Print Item.Subject ' Immediate Window
        For Each Atmt In Item.Attachments
            AtmtName = FilePath & Atmt.FileName
            Atmt.SaveAsFile AtmtName
        Next
    End If
Next
Set Inbox = Nothing
Set Items = Nothing
Set Item = Nothing
Set Atmt = Nothing
Set olNs = Nothing
End Sub

我相信在这里: 如何从Items_ItemAdd事件中过滤项目发件人名称? 可以描述如何更改过滤行的可能解决方案。但是,我做不到。

您的过滤器似乎对我有用,但您可以使用不同的 SQL DASL 语法

Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:fromname" & _
                   Chr(34) & " Like '%yrybchuk@gmail.com%' AND " & _
                   Chr(34) & "urn:schemas:httpmail:read" & _
                   Chr(34) & "=0"

或者更好的是带有附件受限过滤器以改善您的循环

Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:fromname" & _
                   Chr(34) & " Like '%yrybchuk@gmail.com%' AND " & _
                   Chr(34) & "urn:schemas:httpmail:hasattachment" & _
                   Chr(34) & "=1 AND " & _
                   Chr(34) & "urn:schemas:httpmail:read" & _
                   Chr(34) & "=0"

记得更新%yrybchuk@gmail.com%

仅供参考
如果代码是从 Outlook 运行的,则不需要
oOlAp = GetObject(, "Outlook.application")

最新更新