Expédier des emails via Outlook
Dans l’article « Envoyer des emails ou des fax avec Access« , vous avez pu voir comment expédier des mails grâce à la commande Access
SendObject
. Voici une autre méthode, un peu plus lourde à mettre en oeuvre, qui consiste à passer par Microsoft Outlook (pas Outlook Express, mais bien Outlook « tout court » !).
Pourquoi utiliser Outlook ?
La mise en place sur Outlook est un peu plus compliquée et un peu plus lourde à l’exécution ; elle consiste à piloter Outlook par Automation. Mais il y a quelques avantages :
- Vous pouvez utiliser toutes les fonctionnalités d’Outlook, notamment joindre à votre mail des documents de toute nature, et en nombre quelconque. Concrètement, vous pouvez joindre à votre mail un document Excel, un fichier PDF et une présentation Powerpoint, en même temps. Par opposition,
SendObject
ne peut joindre qu’une seule pièce, et celle-ci doit être un objet Access (table, requête…).La gestion des pièces jointes n’est pas traitée dans cet article, mais c’est une ouverture pour plus tard ! - L’envoi automatique d’emails est un sujet sensible lorsqu’il s’agit de sécurité. Le fait de passer par Outlook devrait simplifier (un peu) la chose (voir en fin d’article).
Le code Visual Basic
- Créez un module standard.
- Recopiez ce bout de code dans le module en question :
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 42 43 44 45 46 47 48 49 |
' --- ' ENVOYER UN MAIL DEPUIS ACCESS ' --- ' Entrée : strEmail <- Adresse e-mail du destinataire ' strObj <- Objet du courrier ' strMsg <- Corps du message ' blnEdit <- True pour pouvoir modifier le courrier avant envoi ' False pour expédier le courrier directement. ' Remarques : Le mail est expédié via Microsoft Outlook ' plutôt que via SendObject. Public Sub SendOLMail( _ ByVal strEmail As String, _ ByVal strObj As String, _ ByVal strMsg As String, _ ByVal blnEdit As Boolean) Dim ol As Outlook.Application Dim mi As Outlook.MailItem ' Créer une instance d'Outlook On Error GoTo OLMailErr Set ol = New Outlook.Application ' Créer un objet Email Set mi = ol.CreateItem(olMailItem) ' Paraméter le message With mi .To = strEmail .Subject = strObj .Body = strMsg If blnEdit Then .Display Else .Send End If End With Set mi = Nothing Set ol = Nothing Exit Sub OLMailErr: MsgBox "Erreur : " & Err.Number & vbCrLf & Err.Description Exit Sub End Sub |
CreatObject()
. Mais vous perdez en performances et en confort lors de l’écriture du code.Comment tester ?
La procédure VBA donnée plus haut est volontairement compatible avec celle de cet autre article du blog. Consultez l’article, reprenez sa procédure TestEmail
, en changeant simplement l’instruction SendMail
par : SendOLMail
.
Rien ne vous empêche bien sûr d’utiliser directement les objets Outlook.Application
et Outlook.MailItem
pour aller plus loin !
Le code a été testé sur Outlook 2003 et Outlook 2007, il devrait également fonctionner sur des versions plus anciennes.
A propos de la sécurité
Comme il a été dit en introduction, l’envoi automatique d’emails est un sujet sensible lorsqu’il s’agit de sécurité : votre machine peut suspecter l’envoi automatique de virus sans que vous le sachiez. D’où cet avertissement qui va s’afficher :
Vous devez attendre 5 secondes avant de pouvoir cliquer sur le bouton Accepter. C’est trèèèès long, surtout lorsque vous devez expédier plusieurs messages !
- D’après quelques tests, il semblerait que cet avertissement ne puisse pas être supprimé lorsque vous passez par
SendObject
. - Par contre, si vous utilisez Outlook 2007, et si un certain nombre de conditions (voir plus bas) sont remplies par votre machine, l’avertissement n’est plus nécessairement affiché.
- Si vous utilisez Outlook 2003 (ou une version inférieure), l’avertissement sera affiché quand même… mais il existe une solution dont je vous parlerai bientôt.
Conditions à remplir pour éviter les avertissements de sécurité sur Outlook 2007 (source Microsoft) :
- L’ordinateur client exécute Microsoft Windows XP Service Pack 2 (SP2) ou Microsoft Windows Vista et le Centre de sécurité Windows indique que le logiciel antivirus de l’ordinateur fonctionne correctement. Si l’ordinateur est relié à un domaine, il est possible que l’indicateur d’état de l’antivirus ne soit pas visible, mais cela ne signifie pas pour autant qu’il ne fonctionne pas.
- Le logiciel antivirus installé sur l’ordinateur client est compatible avec Windows XP SP2 ou Windows Vista.
- Outlook 2007 a été configuré sur l’ordinateur client de l’une des façons suivantes :
- Il utilise les paramètres de sécurité par défaut.
- Il utilise les paramètres de sécurité définis par la stratégie de groupe et configurés pour émettre une alerte lorsque le logiciel antivirus est inactif ou qu’il a expiré.
- Il utilise les paramètres de sécurité définis par la stratégie de groupe, mais aucune stratégie d’accès de programmation ne lui est appliquée.
Pour plus de détails, consultez cette page du site de Microsoft.
En résumé :
- Faites en sorte d’avoir un anti-virus compatible et à jour sur votre machine.
- Vérifiez que tous les indicateurs sont au vert dans le Centre de sécurité Windows (dans Windows, menu Démarrer / Panneau de configuration / Centre de sécurité).
- Complétez vos réglages par le Centre de gestion de la confidentialité d’Outlook (dans Outlook 2007 : menu Outils / Centre de gestion de la confidentialité, catégorie Accès par programme).
Coolrider > Si les infos figurent sur le formulaire en cours, ça peut donner quelque chose comme :
Je suppose que…
strMessage
.True
en fin de commande ; peut être remplacé ensuite parFalse
).Me![...]
ne fonctionnera pas.PS :
Etats![...]
ouReports![...]
n’est pas applicable ici, puisqu’on se trouve sur un formulaire.Bonjour,
C’est exactement ce que je recherche.
Pour ma part, j’envoie des emails de SAV à effectuer à de multiples sociétés.
Ce que je n’arrive pas à faire, c’est de reprendre le N° de la mission de SAV dans la ligne « objet » de l’email (c’est donc une variable) ainsi que l’adresse email de la société sélectionnée (toujours une variable). J imagine que la syntaxe doit être du type États![PV SAV]![N°] mais je ne sais pas ni où la placer ni de quelle manière l’écrire.
De la même manière, l’adresse email du destinataire est présente sur cet état (PV SAV)
Et je souhaite donc qu’elle s’inscrive automatiquement dans la ligne « A » de l’email.
Merci d’avance pour vos réponses.
Cordialement,
SuperScipion > Je viens de poster un article pour détailler la procédure à partir d’Access. Ça se trouve ici. Bonne lecture !
Bonjour Monsieur,
Tout d’abord, toutes mes félicitations pour votre process; je travaille sous Access 2010 et tout fonctionne « nickel » (après de multiples tatonnements n’étant pas expert enVBA.
Une question cependant: dans le corps du texte de l’e-mail, je voudrais intégrer une image « JPG » visible par le destinataire à la lecture du message (donc, pas en pièce jointe ou en icone). Quelqu’un vous a déjà posé cette question, mais j’ai beau retourner « le grenier » ou les forums dans tous les sens, je ne trouve rien.
Pourriez-vous m’aider?
Merci d’avance
rmgringo > Pour OL2003, je n’ai pas eu le temps de vérifier. Au cas où, il y aussi une solution alternative : envoyer les mails via libMAIL. libMAIL est une bibliothèque externe, sans avertissement de ce type.
Merci ça marche bien mais est il possible de ne pas avoir le message
d’avertissement d’Outlook 2003 pour l’envoi automatique.
un grand merci, pile-poil ce que je cherchais.