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)
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.
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
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
----------------------------------------------------------------------------
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.
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
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:
Même résultat
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
Pouvez-vous m'aider?
Merci beaucoup
Partager