2016-03-04 1 views
2

J'ai trouvé plusieurs pages sur la façon d'obtenir des pièces jointes, mais pas spécifiquement pour ce dont j'ai besoin.Pièces jointes au sein des pièces jointes

Parfois, je reçois des courriels contenant plusieurs autres courriels en pièces jointes, et chacun de ces courriels contient des fichiers PDF que je voudrais placer sur mon ordinateur quelque part.

Ceci est aussi loin que je suis devenu:

If inSubj("TEST_STRING") Then  'One of my functions from earlier in the code 
    Dim atmt As Attachment 
    Dim outAtmt As MailItem  'Outter attachment (mail attachment) 
    Dim inAtmt As Attachment  'Inner attachment (invoice pdf) 
    Dim path As String: path = "C:\SOME_PATH" 

    For Each atmt In msg.Attachments  'Cycle through attachments 
     If atmt.Type = olEmbeddeditem Then 'If attached is a MailItem 
      Set outAtmt = atmt    'Outter attchment = said MailItem 
      For Each inAtmt In outAtmt.Attachments   'Cycle through attachments (the invoices) 
       inAtmt.SaveAsFile (path & inAtmt.FileName) 'Save file 
      Next inAtmt 
     End If 

    Next atmt 
End If 

Notez que msg est le MailItem qui contient les autres e-mails.

C'est aussi la première fois que j'utilise la boucle For Each, ce qui pourrait être un problème aussi, mais pour le moment, je veux juste avoir la logique d'obtenir ce PDF correct.

Je pense que le problème est que est outAtmt est un MailItem, mais je ne sais pas d'autre façon de le contourner.

+0

donc ce qui se passe ?? recevez-vous et erreur? – Sorceri

+0

Oui, avec la ligne Set outAtmt = atmt. Probablement à cause des types incompatibles. – Samsquatch

+0

Utilisation de OpenSharedItem http://stackoverflow.com/questions/18723017/how-can-i-handle-the-attachment-of-an-attachment Aucun code en réponse. Utilisation de CreateItemFromTemplate http://stackoverflow.com/questions/7890612/vba-code-to-save-an-attachment-excel-file-from-an-outlook-email-that-was-insid- Code en réponse. – niton

Répondre

1

Vous devez ouvrir le fichier MSG enregistré à l'aide de Namespace.GetSharedItem, puis traiter ses pièces jointes.

Si vous voulez éviter d'avoir à enregistrer la pièce jointe de message intégré, vous pouvez utiliser Redemption qui expose les RDOAttachment propriété .EmbeddedMsg (objet retourne RDOMail):

set Session = CreateObject("Redemption.RDOSession") 
    Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
    set rMsg = Session.GetMessageFromID(msg.EntryID) 
    ProcessAttachments(rMsg) 

    ... 
    sub ProcessAttachments(Msg) 
    For Each atmt In rMsg.Attachments  'Cycle through attachments 
     If atmt.Type = olEmbeddeditem Then 
     ProcessAttachments(atmt.EmbeddedMsg) 
     ElseIf atmt.Type = olByValue Then 
     MsgBox atmt.FileName 
     'atmt.SaveAsFile "c:\temp\" & atmt.FileName 
     End If 
    Next 
    end sub