none
Extraire une pièce jointe d'un mail RRS feed

  • Question

  • Bonjour, je suis à la recherche d'une méthode pour extraire une pièce jointe d'une mail par programmation.

    Soit par un complément Outlook soit autre chose.

    Si quelqu'un  peut m'aguiller merci d'avance.


    JF Collombet ® CreateSpecificCulture

    vendredi 9 septembre 2016 03:24

Réponses

  • re

    Si votre but est de détacher des pièces jointes, il y a un programme qui fait ça très bien chez NirSoft.
    OutlookAttachView
    http://www.nirsoft.net

    Si vous voulez le faire en vba, je peux vous donner un code plus complet.

    Si voulez le faire en Vb, vous pouvez piloter Outlook et faire les mêmes opérations.
    par exemple :
     Dim AppOl As Outlook.Application
    AppOl = CreateObject("Outlook.Application")

    et on préfixe tout les objets de Outlook  par AppOl :
    For Each c In AppOl.DossierSource.Items

    Tout dépend de ce que vous voulez faire en pratique

    vendredi 9 septembre 2016 13:15
  • Bonsoir

    Voici un code qui balaye les pièces jointes de la boite de réception :
    Imports Outlook = Microsoft.Office.Interop.Outlook
        Sub PjOutlook()
           Dim AppOl As Outlook.Application
           Dim pj As Outlook.Attachment
           Dim courriel As Outlook.MailItem
           Dim dossier As Outlook.MAPIFolder
           Dim ns As Outlook.NameSpace
           AppOl = CreateObject("Outlook.Application")
           ns = AppOl.GetNamespace("MAPI")
           ' boite de réception
           dossier = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
           ' Boucle sur les courrriers reçus
           For Each courriel In dossier.Items
               For Each pj In courriel.Attachments
                   Console.WriteLine(courriel.Subject & ": " & pj.FileName)
               Next pj
           Next courriel
           AppOl.Quit()
       End Sub

    Il manque la gestion des erreurs, il arrive qu'on trouve autre chose qu'un mailitem dans la boite de réception.
    Le For each n'aime pas trop.

    Il faut ajouter en références du projet les library Office et Outlook  qui correspondent à la version d'office.

    vendredi 9 septembre 2016 20:03
  • Bonsoir

    Merci pour ce code qui m'a bien aidé, il me reste à coder le fait de pouvoir enregistrer les PJ dans un fichier.

    Si cela ne vous dérange pas j'aurais bien aimé avoir le code en VBA pour comparer les 2 approches et voir laquelle serait la meilleure pour l'utilisateur.

    Voici le code modifié pour enregistrer toutes les pièces jointes du dossier dans le dossier Temp de la session sous le nom de la pièce jointe dans les messages.
    Deux déclarations en plus
    Dim temp As String = Environ("temp") & "\"
    Dim nomFich As String

    et modification dans la boucle la plus interne :

    For Each pj In courriel.Attachments
      nomFich = temp & pj.FileName
      pj.SaveAsFile(nomFich)
    Next pj

    Evidemment, écrit comme ça il y a un risque d'acrasement par un fichier de même nom.

    Si on veut supprimer les pièces jointes des messages, il faut faire tourner la boucle à l'envers en utilisant un indice.
    Le vba n'aime pas trop qu'on modifie une collection qui évolue.

    J'avais même un bout de code pour ajouter dans le message le nom des pièces jointes supprimées.
     Bon week end aussi.

    samedi 10 septembre 2016 19:39

Toutes les réponses

  • Bonjour

    Soit par un complément Outlook soit autre chose.

    En vba Outlook c'est simple à faire, je ne sais pas si ça peut vous aider.
    Par exemple la i-ème pièce jointe d'un courriel :
    Set pj = courrier.Attachments(i)

    vendredi 9 septembre 2016 05:36
  • Merci pour ce code, mais ou dois-je le placer, dans les macros Outlook ?

    JF Collombet ® CreateSpecificCulture

    vendredi 9 septembre 2016 12:16
  • re

    Si votre but est de détacher des pièces jointes, il y a un programme qui fait ça très bien chez NirSoft.
    OutlookAttachView
    http://www.nirsoft.net

    Si vous voulez le faire en vba, je peux vous donner un code plus complet.

    Si voulez le faire en Vb, vous pouvez piloter Outlook et faire les mêmes opérations.
    par exemple :
     Dim AppOl As Outlook.Application
    AppOl = CreateObject("Outlook.Application")

    et on préfixe tout les objets de Outlook  par AppOl :
    For Each c In AppOl.DossierSource.Items

    Tout dépend de ce que vous voulez faire en pratique

    vendredi 9 septembre 2016 13:15
  • Merci, je préfèrerais la méthode en VB puisque le but est d'insérer cette extraction dans une solution plus complète.

    merci de votre aide


    JF Collombet ® CreateSpecificCulture

    vendredi 9 septembre 2016 14:16
  • Merci, je préfèrerais la méthode en VB puisque le but est d'insérer cette extraction dans une solution plus complète.

    D'accord, je vais préparer un peu, je ne l'ai pas encore fait pour vb/Outlook.

    vendredi 9 septembre 2016 15:29
  • Bonsoir

    Voici un code qui balaye les pièces jointes de la boite de réception :
    Imports Outlook = Microsoft.Office.Interop.Outlook
        Sub PjOutlook()
           Dim AppOl As Outlook.Application
           Dim pj As Outlook.Attachment
           Dim courriel As Outlook.MailItem
           Dim dossier As Outlook.MAPIFolder
           Dim ns As Outlook.NameSpace
           AppOl = CreateObject("Outlook.Application")
           ns = AppOl.GetNamespace("MAPI")
           ' boite de réception
           dossier = ns.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox)
           ' Boucle sur les courrriers reçus
           For Each courriel In dossier.Items
               For Each pj In courriel.Attachments
                   Console.WriteLine(courriel.Subject & ": " & pj.FileName)
               Next pj
           Next courriel
           AppOl.Quit()
       End Sub

    Il manque la gestion des erreurs, il arrive qu'on trouve autre chose qu'un mailitem dans la boite de réception.
    Le For each n'aime pas trop.

    Il faut ajouter en références du projet les library Office et Outlook  qui correspondent à la version d'office.

    vendredi 9 septembre 2016 20:03
  • Merci beaucoup,je teste ce code et je vous reviens

    JF Collombet ® CreateSpecificCulture

    samedi 10 septembre 2016 01:33
  • Merci pour ce code qui m'a bien aidé, il me reste à coder le fait de pouvoir enregistrer les PJ dans un fichier.

    Si cela ne vous dérange pas j'aurais bien aimé avoir le code en VBA pour comparer les 2 approches et voir laquelle serait la meilleure pour l'utilisateur.

    Merci et bon Weekend


    JF Collombet ® CreateSpecificCulture

    samedi 10 septembre 2016 15:58
  • Bonsoir

    Merci pour ce code qui m'a bien aidé, il me reste à coder le fait de pouvoir enregistrer les PJ dans un fichier.

    Si cela ne vous dérange pas j'aurais bien aimé avoir le code en VBA pour comparer les 2 approches et voir laquelle serait la meilleure pour l'utilisateur.

    Voici le code modifié pour enregistrer toutes les pièces jointes du dossier dans le dossier Temp de la session sous le nom de la pièce jointe dans les messages.
    Deux déclarations en plus
    Dim temp As String = Environ("temp") & "\"
    Dim nomFich As String

    et modification dans la boucle la plus interne :

    For Each pj In courriel.Attachments
      nomFich = temp & pj.FileName
      pj.SaveAsFile(nomFich)
    Next pj

    Evidemment, écrit comme ça il y a un risque d'acrasement par un fichier de même nom.

    Si on veut supprimer les pièces jointes des messages, il faut faire tourner la boucle à l'envers en utilisant un indice.
    Le vba n'aime pas trop qu'on modifie une collection qui évolue.

    J'avais même un bout de code pour ajouter dans le message le nom des pièces jointes supprimées.
     Bon week end aussi.

    samedi 10 septembre 2016 19:39
  • Merci pour tous il me manque juste un bout de code à l'ouverture de l'application Outlook pour que celle soit visible par l'utilisateur comme on le fait pour Excel par exemple en utilisant le code :

    AppOl.Visible = True


    JF Collombet ® CreateSpecificCulture

    mardi 13 septembre 2016 12:55
  • Bonjour

    AppOl.Visible = True

    Oui, c'est ce que je fais pour les autres applications, pour Outlook ça n'existe pas et je n'ai pas trouvé d'autre moyen.
    Désolé

    mardi 13 septembre 2016 14:44