2017-05-22 3 views
1

Je souhaite télécharger toutes les pièces jointes des e-mails non lus et reçus de l'expéditeur spécifique dans MS Outlook.Télécharger les pièces jointes à partir des éléments UnRead et proviennent de l'expéditeur spécifique

J'ai trouvé un code qui télécharge toutes les pièces jointes de tous les e-mails non lus. Downloading Attachments from Unread Emails of MS Outlook et a tenté de l'adapter.

Cependant, le filtre ne fonctionne pas correctement. Cela montre qu'il n'y a pas de tels e-mails.

Filter = "[Unread] = True And [SenderEmailAddress] = '[email protected]'" 

est Ci-dessous le code entier:

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] = '[email protected]'" 
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 

Je crois que ici: How to filter items sendername from Items_ItemAdd Events? pourrait être décrit solution possible comment changer la ligne de filtre. Cependant, je ne pouvais pas le faire.

+0

Je ne vois rien de mal à votre filtre, quel bureau êtes-vous et obtenez-vous un e rrrr? – 0m3r

+0

J'utilise MS Office 2010 et je ne reçois aucune erreur. Le problème est, il ne peut pas trouver un tel e-mail - il montre qu'il n'y a pas un tel e-mail dans la boîte. Alors que si j'utilise le filtre uniquement pour les e-mails non lus - il en trouve un. – Iaroslav

Répondre

0

Votre filtre semble fonctionner pour moi, mais ici est différent SQL DASL syntax vous pouvez utiliser

Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:fromname" & _ 
        Chr(34) & " Like '%[email protected]%' AND " & _ 
        Chr(34) & "urn:schemas:httpmail:read" & _ 
        Chr(34) & "=0" 

Ou mieux encore un avec l'attachement Restricted Filter pour améliorer votre boucle

Filter = "@SQL=" & Chr(34) & "urn:schemas:httpmail:fromname" & _ 
        Chr(34) & " Like '%[email protected]%' AND " & _ 
        Chr(34) & "urn:schemas:httpmail:hasattachment" & _ 
        Chr(34) & "=1 AND " & _ 
        Chr(34) & "urn:schemas:httpmail:read" & _ 
        Chr(34) & "=0" 

rappelez-vous mettre à jour %[email protected]%

Pour votre information
Si le code est exécuté à partir d'Outlook, vous n'avez pas besoin
oOlAp = GetObject(, "Outlook.application")

+1

J'ai utilisé un filtre restreint et cela a fonctionné. Je vous remercie. – Iaroslav