Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Access » Assistants » libMAILConnexion
 


Introduction

Dans la série : "comment, à partir d'Access, expédier un email avec ou sans pièces jointes ?", voici une méthode alternative proposée par Denis Scheidt (également contributeur sur les forums self-access.com)...

La bibliothèque libMAIL fournie par Denis implémente ce qu'il faut de la RFC821 pour permettre l'envoi de mails à partir d'Access. Le tout en pur VBA et sous licence LGPL... Ca vous dit d'essayer ?

Soutenez le projet !
Si vous souhaitez soutenir le projet et encourager son développement, vous pouvez aider Denis par un don Paypal. Merci par avance !

Présentation de libMAIL

Je cite directement l'introduction de libMAIL :

Il arrive régulièrement que l'on ait besoin d'envoyer un état ou un fichier (résultat d'une requête, par exemple) par messagerie électronique à partir d'une application Access.

Access n'offre que deux méthodes pour effectuer cette action : la méthode SendObject de l'objet DoCmd ou l'utilisation d'un objet Outlook.Application (si Outlook est le client de messagerie utilisé par le poste).

Ces deux solutions présentent l'avantage de la simplicité, mais ont également quelques inconvénients non négligeables :

  • La méthode SendObject ne permet d'envoyer que des objets Access (formulaire, état, module, etc...). Il n'est pas possible de joindre un fichier externe. De plus, la mise en page est perdue, seules les données étant transmises.
  • Lorsqu'une application est diffusée chez plusieurs clients, par exemple, rien ne permet d'être sûr qu'un poste disposera de MS-Outlook. Il peut utiliser un autre client de messagerie (qui ne sera peut-être pas compatible MAPI), ou même ne disposer d'aucun logiciel de messagerie électronique. Écrire un code tenant compte de tous les cas possibles peut vite devenir très compliqué.
  • Piloter une application tiers pose également des problèmes : il faut s'assurer que l'application existe sur le poste, éventuellement l'inclure dans le jeu d'installation de l'application Access. Cette application risque d'être mise à jour par ailleurs, et perturber ainsi le déroulement de l'application Access.

Ces différentes contraintes peuvent nous faire préférer une solution plus souple et efficace : avoir un mini-serveur SMTP, écrit en VBA, donc utilisable directement depuis une application Access, et ne dépendant d'aucun composant ou logiciel externe.

Avantages de libMAIL

La bibliothèque libMail présente plusieurs avantages :

  • Vous pouvez expédier des messages avec ou sans pièces jointes ;
  • Vous n'avez besoin d'aucun logiciel externe (la bibliothèque est développée en VBA) ;
  • Vous n'aurez pas d'avertissement de sécurité, comme c'est le cas lorsque vous utilisez Outlook Automation.
  • La bibliothèque est sous licence LGPL : le code source est donc public et ré-exploitable librement.

Téléchargement

La version stable actuelle est numérotée 1.41.
Vous trouverez le changelog sur cette page.

  1. Téléchargez libMAIL.
  2. Une fois le fichier Zip téléchargé, cliquez sur son icône du bouton droit de la souris, puis sélectionnez Extraire tout.
    Vous obtenez un dossier contenant lui-même 3 sous-dossiers :
    - code : le code VBA et tout ce qui constitue la bibliothèque libMAIL.
    - doc : la documentation de la bibliothèque, sous plusieurs formats (PDF, OpenOffice).
    - licence : la licence LGPL.
  3. Consultez la documentation pour bien comprendre le fonctionnement et l'installation de libMAIL.

l i b M A I L   -   V e r s i o n   s t a b l e  Taille Format Téléchargements
Bibliothèque libMAIL - Version 1.41 Update!Bibliothèque permettant l'envoi de mails à partir d'Access. Version 1.41. 980 Ko 1876
 
l i b M A I L   -   A n c i e n n e s   v e r s i o n s  Taille Format Téléchargements
Bibliothèque libMAIL - Version 1.40 Bibliothèque permettant l'envoi de mails à partir d'Access. Version 1.40. 970 Ko 986
Bibliothèque libMAIL - Version 1.30 Bibliothèque permettant l'envoi de mails à partir d'Access. Version 1.30. 760 Ko 1516
Bibliothèque libMAIL - Version 1.20 Bibliothèque permettant l'envoi de mails à partir d'Access 450 Ko 1255


 5633 téléchargements depuis le 27/07/2009

Installation express

Si vous êtes pressé, voici une idée générale de l'installation :

  1. Créez une base de données vide que vous nommerez par exemple libMAIL.mdb.
  2. Copiez dans le même dossier tous les fichiers du sous-dossier code fourni avec libMAIL.
  3. Importez le module Outils.MOD.
    Prenez soin d'enregistrer ce module sous le nom Outils, sinon l'exécution de la procédure ChargeVB provoquera le crash d'Access.
  4. Vérifiez que la bibliothèque DAO est activée dans votre projet (voir plus bas).
  5. Dans la fenêtre Exécution, tapez :
    ChargeVB puis appuyez sur la touche [Entrée].
    Vous pouvez aussi placer le curseur dans la procédure ChargeVB, et cliquer sur l'icône Exécuter Sub/UserForm .

Important
libMAIL
fait appel à la bibliothèque DAO (Microsoft DAO Object Library). Cette bibliothèque doit donc être associée à votre base de données pour que le programme fonctionne.
 
Pour plus de détails sur les références, consultez cette page.
Pensez aussi à compiler votre code VBA, après l'installation, pour vérifier que tout est correct.

Une fois la bibliothèque créée...

... il faut l'ajouter à votre projet (donc à votre base de données principale).
Pour cela, vous avez aussi plusieurs possibilités :

  • Vous pouvez transformer votre bibliothèque libMAIL.mdb en un complément Access (libMAIL.mda), et l'installer ensuite sur votre machine. Le processus est un peu long et sort du cadre de cet article.
  • Vous pouvez lier la bibliothèque libMAIL.mdb comme n'importe quelle référence VBA.

ScreenCast
Si tout ça ne vous paraît pas bien clair, je vous ai prévu une petite vidéo - en bas de cet article - pour illustrer tout le processus. Z'êtes gatés, non ?

Et si on expédiait un mail ?

Ce qu'il faut bien comprendre avant de démarrer, c'est que l'envoi de mails se fait en 2 étapes :

  1. Vous devez d'abord préparer vos messages (normal, non ?).
  2. Vous devez ensuite démarrer le serveur SMTP qui va se charger de l'envoi des messages.

Exemple #1 : envoi de messages simples

Commençons par un cas simple : on souhaite expédier un message sans pièce jointe. Recopiez le code ci-dessous dans un module standard de votre base de données :

Sub EnvoiMailSimple()
  ' Préparation du message
  CreeMail "destinataire@fournisseur.fr", _
    "Test de libMAIL", _
    "Ceci est un message envoyé par Access+libMAIL...", _
    "emetteur@provider.com", _
    CurrentUser
   
  ' Démarrage du serveur SMTP
  ' (et envoi du message)
  SMTPLance "smtp.provider.com", "provider.com"
End Sub

Sachant que :

  • L'adresse destinataire@fournisseur.fr doit bien sûr être remplacée par celle de votre destinataire réel. Vous pouvez écrire plusieurs adresses, séparées par des virgules ou des points-virgules.
  • Le second paramètre est le sujet du message.
  • Le troisième paramètre est le corps du message.
  • L'adresse emetteur@provider.com est en principe votre propre adresse e-mail.
  • CurrentUser donne le nom d'utilisateur Access qui expédie le message (généralement : Admin). Ce paramètre n'est pas utilisé dans le message, mais seulement dans les journaux de suivi.
    Nouveauté de la version 1.01 : ce paramètre est facultatif (si vous l'omettez, c'est le nom de l'utilisateur Windows qui est pris en compte).

Une fois le message créé, la procédure SMTPLance démarre le serveur proprement dit. Elle accepte au minimum 2 paramètres :

  • Le nom du serveur SMTP à utiliser pour l'envoi des messages. En général, celui de votre fournisseur d'accès.
    Par exemple, si vous êtes abonné Free, vous utiliserez : smtp.free.fr
  • Le nom de domaine avec lequel libMAIL va s'identifier auprès du serveur SMTP. Ca peut être votre nom de domaine si vous en avez un, sinon celui de votre fournisseur d'accès.
    Toujours pour Free, vous pouvez utiliser : free.fr

Astuce
Les procédures CreeMail et SMTPLance proposent de nombreuses autres options, notamment la prise en charge des destinataires en copie simple ou cachée (Cc et Bcc). Vous trouverez plus de détails dans la documentation de libMAIL.

Exemple #2 : envoi de pièces jointes

Le principe est le même si vous devez joindre des documents à votre message. Il va falloir en plus :

  • Stocker la liste des pièces jointes dans un tableau VBA.
  • Transmettre ce tableau à la procédure CreeMail.
Sub EnvoiMailAvecPJ()
  ' Initialiser la liste des pièces jointes
  Dim tblPJ(1, 2) As String
  tblPJ(0, 0) = "Manuel_libMAIL.pdf"
  tblPJ(1, 0) = "C:\Documents and Settings\...\Manuel_libMAIL.pdf"
 
  tblPJ(0, 1) = "Hiver.jpg"
  tblPJ(1, 1) = "C:\Documents and Settings\...\Collines.jpg"
 
  tblPJ(0, 2) = "Coucher de soleil.jpg"
  tblPJ(1, 2) = "C:\Documents and Settings\...\Coucher de soleil.jpg"
 
  ' Préparation du message
  CreeMail "destinataire@fournisseur.fr", _
    "Test de libMAIL", _
    "Ceci est un message envoyé par Access+libMAIL...", _
    "emetteur@provider.com", _
    CurrentUser, , , tblPJ
   
  ' Démarrage du serveur SMTP
  ' (et envoi du message)
  SMTPLance "smtp.provider.com", "provider.com"
End Sub

Conseil
Comme vous utiliserez probablement souvent les mêmes informations SMTP pour appeler SMTPLance, vous devriez en faire des constantes VBA, ou - encore mieux - des paramètres de votre application.

Questions fréquentes

Pourquoi ne pas livrer la bibliothèque directement sous forme de fichier .mdb ou .accdb ?

La réponse est dans la question :) : parce que les formats des fichiers Access évoluent, et qu'il est difficile de fournir un fichier pour chaque version d'Access. L'approche retenue permet de livrer une version unique, compatible avec tous les Access du moment (au moins depuis 97 !).

Est-ce que je peux intégrer les modules et le formulaire directement dans ma base de données ?

C'est possible aussi, et ça marchera aussi bien...
Il y a quand même quelques petites choses à prendre en compte :

  • Les inconvénients de gestion : si vous devez mettre à jour la bibliothèque, vous devrez remplacer manuellement les anciens modules VBA (et le formulaire SMTP) par les nouveaux. Et vous ne pourrez pas utiliser le module Outils pour cette opération (rappelons qu'il ne doit être utilisé que pour construire la bibliothèque "from scratch").
  • La bibliothèque est sous licence LGPL. Tant qu'elle est liée à votre application, votre base Access n'est pas concernée. Par contre, si le code de la bibliothèque est intégré à votre base, celle-ci passe également sous licence LGPL. Consultez la licence pour plus de détails.

Est-ce que libMAIL est compatible avec le SMTP de Google Mail ?

Réponse de Denis sur les forums du site :

Malheureusement, libMAIL ne peut pas se connecter à GMail pour le moment. Smiley
La messagerie de Google sort un peu des sentiers battus :

  • elle utilise le port 587 au lieu du traditionnel port 25. La version 1.30 de libMAIL permet de spécifier un port non standard. Jusque là, ça irait...
  • GMail nécessite une connexion chiffrée TLS (anciennement SSL) (RFC-2246) Smiley

Ici, il n'y a que deux solutions :

  • trouver une bibliothèque ou une API TLS. Mais je veux limiter autant que possible les dépendances de libMAIL (une API native Windows, OK, une DLL supplémentaire, non).
  • implémenter moi-même la RFC-2246, directement en VBA. Mais, d'après ce que j'ai pu en voir, c'est assez touffu...

Si quelqu'un a dans ses cartons une implémentation VBA de TLS, et qu'il(elle) est prêt(e) à la mettre sous licence LGPL, je me ferai un plaisir de l'incorporer à la prochaine version winking smiley

Support

Si vous avez des questions ou des problèmes avec libMail, vous pouvez...

  • les poster sur le forum libMAIL de self-access.com ;
  • écrire directement à l'auteur (Denis), dont l'adresse figure dans la documentation.

Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2018 hervé inisan, self-access.com Reproduction interdite ]