从“来自UnRead项目”下载附件,这些附件来自特定发件人

时间:2017-05-22 11:38:34

标签: vba outlook-vba outlook-2010 outlook-filter

我想从电子邮件中下载所有附件,这些附件都是未读的,并且在MS Outlook中从特定发件人收到

我找到了一个代码,可以从所有未读电子邮件中下载所有附件。 Downloading Attachments from Unread Emails of 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:\Users\irybchuk\Documents\"
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

我相信这里:How to filter items sendername from Items_ItemAdd Events?可以描述如何更改过滤线的可能解决方案。但是,我不能这样做。

1 个答案:

答案 0 :(得分:0)

您的过滤器似乎对我有用,但是您可以使用不同的SQL DASL语法 Filter =“@ SQL =”& Chr(34)& “urn:schemas:httpmail:fromname”& _                    Chr(34)& “喜欢'%yyybchuk @ gmail.com%'和”& _                    Chr(34)& “urn:schemas:httpmail:read”& _                    Chr(34)& “= O” 或者更好的是附件Restricted Filter来改善你的循环 Filter =“@ SQL =”& Chr(34)& “urn:schemas:httpmail:fromname”& _                    Chr(34)& “喜欢'%yyybchuk @ gmail.com%'和”& _                    Chr(34)& “urn:schemas:httpmail:hasattachment”& _                    Chr(34)& “= 1 AND”& _                    Chr(34)& “urn:schemas:httpmail:read”& _                    Chr(34)& “= O” 记得更新%yrybchuk@gmail.com%   FYI   如果从Outlook运行代码,那么您不需要   oOlAp = GetObject(,“Outlook.application”)