IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Outlook Discussion :

Manipulations sur les emails envoyés


Sujet :

VBA Outlook

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Manipulations sur les emails envoyés
    Bonjour à tous,

    J'ai besoin de détecter l'envoi d'un email depuis Outlook 2013 afin d'effectuer plusieurs traitements. (sauvegarde du .msg dans un endroit précis, mise à jour d'une base externe par odbc.....)
    Ces traitements doivent être effectués uniquement si l'email a bien été envoyé. (donc sans erreur)
    Voilà pourquoi je me suis intéressé à détecter l'évènement itemadd sur les folders "Eléments envoyés" des boîtes emails définis sur Outlook de l'utilisateur.

    Je crée dans ThisOutlookSession: (On se limite à 2 boîtes)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    Dim WithEvents objsentitems1 As Items
    Dim WithEvents objsentitems2 As Items
     
    ----------------------------------------------------------------------------
    Private Sub Application_Startup()
     
    Dim NS As Outlook.NameSpace
    Set NS = Application.GetNamespace("MAPI")
    Set obj1 = NS.Folders(1)
    Set objsentitems1 = obj1.Folders("Éléments envoyés").Items
     
    Set obj2 = NS.Folders(2)
    Set objsentitems2 = obj2.Folders("Éléments envoyés").Items
     
    Set NS = Nothing
     
    End Sub
     
     
    ----------------------------------------------------------------------------
    Private Sub objsentitems1_ItemAdd(ByVal Item As Object)
     
    If Item.Class <> olMail Then GoTo fin
     
    MsgBox ("envoyé depuis boîte 1")
     
    fin:
     
    End Sub
     
     
    ----------------------------------------------------------------------------
    Private Sub objsentitems2_ItemAdd(ByVal Item As Object)
     
    If Item.Class <> olMail Then GoTo fin
     
    MsgBox ("envoyé depuis boîte 2")
     
    fin:
     
    End Sub

    Ces macros marchent très bien.
    Un email envoyé depuis la boîte 1 déclenche bien la macro objsentitems1_ItemAdd (En fait, un item ajouté dans Eléments envoyés plus exactement)
    Idem pour la boîte 2

    Cependant, dans le cas (et c'est le mien !!!) où l'une des deux boîtes est un compte exchange, l'ajout d'un item dans le folder "Eléments envoyés" (c'est à dire l'envoi d'un message) peut provenir d'un envoi depuis un autre poste configuré avec cette même boîte exchange.
    Je veux donc faire un test sur "Est-ce bien mon poste qui est à l'origine de l'envoi du message".

    Pour cela, j'utilise la macro suivante: (tjs dans ThisOutlookSession)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub Application_ItemSend(ByVal Item As Object, Cancel As Boolean)
     
        Dim NomOrdinateur As String
        Dim NomUser As String
        NomOrdinateur = Environ("COMPUTERNAME")
        NomUser = Environ("USERNAME")
     
        Item.Companies = NomOrdinateur + Chr(9) + NomUser
        Item.Save
     
        Set Item = Nothing
     
    End Sub
    L'idée ici est de renseigner une propriété de l'email avant envoi afin de pouvoir tester cette propriété après l'envoi réel.
    Je renseigne la propriété Companies avec le nom de l'ordinateur + le nom de l'utilisateur
    Ainsi, je pense naïvement pouvoir tester cette propriété dans mes macros objsentitemsn_ItemAdd et ainsi pouvoir savoir si c'est bien ce poste qui envoie le message

    ----------------------------------------------------------------------------
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Private Sub objsentitems1_ItemAdd(ByVal Item As Object)
    Dim NomOrdinateur As String
    Dim NomUser As String
     
    NomOrdinateur = Environ("COMPUTERNAME")
    NomUser = Environ("USERNAME")
     
    If Item.Class <> olMail Then GoTo fin
     
    If Item.Companies <> NomOrdinateur + Chr(9) + NomUser Then GoTo fin
     
    MsgBox ("envoyé depuis 1")
     
    fin:
     
    End Sub
    Dans cette macro objsentitems1_ItemAdd, la propriété Item.Companies est désespérément vide. Du coup, impossible de savoir si c'est le poste qui a envoyé l'email.
    J'ai l'impression que le item.save de Application_ItemSend permet d'enregistrer les propriétés de l'email pour le dossier en cours (Ici Boîte d'envoi)
    Mais quand le folder change (Boîte d'envoi ==> Eléments envoyés), les propriétés sont perdues.
    En modifiant la propriété sujet, ça fonctionne. On retrouve bien item.subject dans la macro objsentitems1_ItemAdd tel qu'on l'a modifié dans Application_ItemSend
    Mais pas super propre !!
    J'ai essayé aussi avec les champs personnalisés:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Set usProp = Item.UserProperties("OrdiUserSender")
    If usProp Is Nothing Then
         Set usProp = Item.UserProperties.Add("OrdiUserSender", olText)
         usProp.Value = NomOrdinateur + Chr(9) + NomUser
         Item.Save
    End If
     
    dans la macro Application_ItemSend
     
    Puis je tente la récup de cette valeur dans objsentitems1_ItemAdd:
    Set usProp = Item.UserProperties("OrdiUserSender")
    If usProp Is Nothing Then GoTo fin
    If usProp.Value <> NomOrdinateur + Chr(9) + NomUser Then GoTo fin
    Même résultat
    Pouvez-vous m'aider?

    Merci beaucoup

  2. #2
    Expert éminent
    Avatar de Oliv-
    Homme Profil pro
    solution provider
    Inscrit en
    Mars 2006
    Messages
    4 087
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : solution provider

    Informations forums :
    Inscription : Mars 2006
    Messages : 4 087
    Points : 7 168
    Points
    7 168
    Billets dans le blog
    20
    Par défaut
    Bonsoir,

    J'ai déjà lu un problème similaire avec OL2013 (ICI), alors que ton code fonctionne bien avec ol2010.

    Malheureusement n'ayant pas ol2013 je ne peux tester.

    Essaye cependant une autre propriété comme .Categories

    Je pense que ca peut venir d'une option de sécurité introduite dans cette version.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juin 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juin 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci de votre réponse.
    Du coup, vous m'avez éclairé en parlant de .Categories.

    Je m'explique !!

    En fait, j'ai 3 boîtes:
    - L'une est de type mdaemon
    - une est de type exchange on line
    - la dernière est une pop

    Je fais comme un idiot mes tests sur la Mdaemon uniquement depuis cet am.
    Et je me souviens que l'on a plein de soucis avec ces types de boîtes, notamment le fait que les catégories ne sont pas conservées !!!
    En testant avec la boîte exchange ou pop, mes macros fonctionnent (Le .companies est bien alimenté et lu)
    Donc, on va virer les boîtes mdaemon, je pense

    Et mille mercis pour m'avoir mis sur la voie.

    Bonsoir.

Discussions similaires

  1. Statistique sur les emails
    Par ryodo dans le forum Langage
    Réponses: 4
    Dernier message: 26/06/2012, 04h49
  2. Filtres sur les emails envoyés
    Par ceweb dans le forum Thunderbird
    Réponses: 1
    Dernier message: 13/10/2009, 08h20
  3. [Débutant] manipulations sur les tableaux
    Par nahr_Elk dans le forum Algorithmes et structures de données
    Réponses: 5
    Dernier message: 13/09/2008, 23h40
  4. Manipulations sur les bits
    Par ThE_LaSt dans le forum C
    Réponses: 23
    Dernier message: 27/03/2006, 14h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo