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

  1. Créez un module standard.
  2. Recopiez ce bout de code dans le module en question :

Important
L’exemple de code ci-dessus fait appel à la bibliothèque Outlook (Microsoft Outlook Object Library). Cette bibliothèque doit être associée à votre base de données pour que le programme fonctionne. Elle est numérotée 12.0 sur Outlook 2007, 11.0 sur Outlook 2003.Pour plus de détails sur les références, consultez cette page.Pour les habitués : il serait possible de ne pas créer de référence, en utilisant la fonction VBA 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.

Info
Le pilotage d’Outlook est parfois capricieux… Si une erreur s’affiche lors de l’envoi du message par Access, pensez à démarrer Outlook avant de relancer la procédure.

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é :

  1. Faites en sorte d’avoir un anti-virus compatible et à jour sur votre machine.
  2. 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é).
  3. 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).

Vous aimerez aussi...

7 réponses

  1. Hervé Inisan dit :

    Coolrider > Si les infos figurent sur le formulaire en cours, ça peut donner quelque chose comme :

    Je suppose que…

    • Le message a déjà été renseigné dans la variable strMessage.
    • On veut modifier le message avant envoi (d’où le True en fin de commande ; peut être remplacé ensuite par False).
    • La commande est tapé dans un événement du formulaire (par exemple, dans un clic de bouton). Sinon, le Me![...] ne fonctionnera pas.

    PS : Etats![...] ou Reports![...] n’est pas applicable ici, puisqu’on se trouve sur un formulaire.

  2. Coolrider dit :

    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,

  3. Hervé Inisan dit :

    SuperScipion > Je viens de poster un article pour détailler la procédure à partir d’Access. Ça se trouve ici. Bonne lecture !

  4. SuperScipion dit :

    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

  5. Hervé Inisan dit :

    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.

  6. rmgringo dit :

    Merci ça marche bien mais est il possible de ne pas avoir le message
    d’avertissement d’Outlook 2003 pour l’envoi automatique.

  7. zornitho dit :

    un grand merci, pile-poil ce que je cherchais.

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *