Envoyer des e-mails ou des fax avec Access
Comment envoyer des e-mails ou des fax avec Access ?
Access 97 et les versions suivantes disposent d’une fonction qui permet d’expédier des e-mails ou des fax (à condition que votre ordinateur ait un système de messagerie d’installé, comme Outlook ou Exchange). Cette fonction s’appelle SendObject
(dépendante de l’objet DoCmd
).
SendObject
ne permet pas d’expédier des pièces jointes, excepté des objets Access. Si tel est votre souhait, il faut passer plutôt par Automation avec Outlook, par exemple. Consultez le tag automation
du blog.Le code Visual Basic
Voici une procédure Visual Basic mettant en place la commande SendObject
.
Pour des raisons pratiques, nous gérons l’envoi d’un message simple (destinataire, objet, message). Les champs CC: (copie à) et CCI: (copie cachée à) ne sont pas gérés (mais vous pourrez améliorer tout ça en consultant la documentation Access).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
' --- ' 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. ' Public Sub SendMail(ByVal strEmail As String, _ ByVal strObj As String, _ ByVal strMsg As String, _ ByVal blnEdit As Boolean) On Error Resume Next DoCmd.SendObject acSendNoObject, , , strEmail, , , strObj, strMsg, blnEdit End Sub |
Le dernier paramètre (blnEdit
) peut valoir True
(Vrai) ou False
(Faux).
S’il vaut True
, le message sera affiché à l’écran pour modification éventuelle avant envoi. Dans le cas contraire, le message est expédié directement.
Comment tester ?
Voici une petite procédure, à taper dans un module puis à exécuter.
On pourrait améliorer (on peut toujours !) en écrivant une procédure qui envoie un e-mail à toutes les personnes contenues dans une table.
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 |
' --- ' TEST DE L'ENVOI DE MAIL ' --- ' Public Sub TestEmail() Dim strDest As String ' L'adresse e-mail du destinataire Dim strMessage As String ' Le corps du message ' Création du corps du message strMessage = "Voici un petit exemple illustrant la" strMessage = strMessage & vbCrLf & "la possibilité d'expédier un e-mail" strMessage = strMessage & vbCrLf & "depuis Microsoft Access." strMessage = strMessage & vbCrLf & vbCrLf & "Hervé Inisan" strMessage = strMessage & vbCrLf & "http://www.self-access.com" ' On demande l'adresse e-mail du destinataire strDest = InputBox("Tapez une adresse e-mail existante : ", _ "Messagerie Access", _ "bill.gates@microsoft.com") If strDest = "" Then Exit Sub ' Envoi du message SendMail strDest, _ "** Email depuis Access **", _ strMessage, _ True End Sub |
Bonjour,
Je souhaiterais que le destinataire du mail soit toujours l émetteur . Comment faire pour récupérer l adresse de l émetteur Pour le replacer dans le script d émission du mail ?
Merci de votre aide
Si j’ai suivi la question, l’adresse de l’émetteur ne peut pas être récupérée simplement, puisque
SendObject
sous-traite l’envoi au logiciel de messagerie installé (et configuré) sur la machine.On peut par contre imaginer de stocker cette info dans une table Access.
Chez Rien ne marche, Erreur End Sub attendu, y a t-il de prealable pour que l’envoi marche?
S’il y a un
End Sub
attendu, ça veut dire que le code recopié est incorrect.Super tout fonctionne 🙂
Un grand merci à vous Hervé.
Content que ça marche ! 🙂
Ainsi que l’objet du mail qui se nomme « Info: » voit apparaître à coté le nom du champ client correspondant. ex « info xxx »
Encore merci.
Bonjour,
étant plus que novice , je tourne en rond depuis un bon moment.
Au lieur de saisir le mail dans la msgbox, j’aurais souhaité que l’adresse mail du destinataire s’affiche en rapport avec l’enregistrement sur lequel je clique dans mon champ Mail de mon formulaire.
Si vous avez une petite idée !
Merci .
Philobee a posé une question proche (ma réponse à cette question, plus bas, devrait aider).
marcgsc > Le problème vient du champ « Lien hypertexte ». En recopiant la fonction donnée dans l’article Nettoyer des liens hypertexte à la volée, et en remplaçant la ligne :
par :
… ça devrait mieux marcher.
Ouala ! 🙂
Bonjour. Merci pour toutes ces informations très pratiques. J’ai un problème avec le format de l’adresse mail.
J’ai enregistré la procédure à partir d’un bouton de commande dans un formulaire et je récupère automatiquement l’adresse mail d’un champs du formulaire (Zone de texte nommée Mail Expert – format lien hypertexte).
A la place de la boite de dialogue, j’ai codé l’adresse mail comme suit : strDest = Me![Mail Expert].
Ca marche mais dans la zone destinataire du mail (Outlook), l’adresse est enregistrée 2 fois : xxxxx@orange.fr#mailto:xxxxx@orange.fr#
Auriez vous une solution ?
Précision : le champs [Mail Expert] est alimenté par une table liée.
Bien cordialement
Laurent > Je n’ai pas testé avec Windows Live Mail, mais la commande
SendObject
appelle le client mail configuré par défaut sur la machine. Est-ce que ton WLM est bien configuré comme messagerie par défaut ?Bonjour,
J’ai crée un bouton sur Access, qui permet de récupérer l’adresse mail et sa commande. Celui-ci fonctionne très bien sur un pc équipé de Outlook. Par contre, lors de test avec de nouveau pc équipé de Windows Live Mail, ce bouton ne fonctionne plus, il me dit aue la commande sendobject n’est pas disponible pour l’instant. Est-ce une incompatibilité entre les 2 programmes, Windows Live Mail et Access2010 ?
bishop >
SendMail
utilise la messagerie du poste par défaut, ce n’est pas Access qui décide. Donc ce serait plutôt du côté messagerie qu’il faudrait regarder. Une solution alternative peut consister à passer par libMAIL, qui est plus autonome et paramétrable.salut a tous,
Je viens d’utiliser cette petite appli et c’est bien sympa, par contre est-il possible de changer l’adresse de l’expéditeur pour la forcer en dur quelque soit le terminal qui expédit le mail (je suis en TSE).
Merci d’avance
W.Pierre
sab > Si, si, c’est possible ! 🙂 Il suffit d’aménager la partie qui crée le message (
strMessage
) en injectant des champs du formulaire. Par exemple :J’ai supposé que :
Me
parForms![Nom du formulaire]
.Numéro Client
.Bonjour,
En passant, votre macro fonctionne a merveille. Je me posais la question suivante, j’ai ajouté un bouton dans mon formulaire qui effectue cette macro. Est-ce possible d’ajouter dans cette macro une donnée de ce formulaire?
Exemple dans l’objet du message, inscrire automatiquement le numéro du client qui est inscrit dans le formulaire?
MERCI À L’AVANCE!
Merci beacoup! à retardement ;o)
Fini les vacances, je vais essayer et je vous reviens!
Bonne journée!
Philobee > A froid comme ça, je dirais qu’il faut aménager l’appel de
SendMail
de cette manière :A condition que le formulaire contienne un champ (zone de texte) appelé « Corps du message ». On peut faire pareil avec l’objet du message (que je n’ai pas changé ici). Le corps du message peut être long, ça ne posera pas de souci.
Bonjour, dabord un gros merci!! grâce à vous j’avance dans l’aventure de créer une BD..
Le 6 janvier 2010 Vous avez répondu à la question de Dorian:
la réponse était:dans ce cas, à supposer qu’on soit dans le Sub/End Sub du bouton, il faudrait écrire :
SendMail Me![Nom du champ Email], « Objet du message », « Corps du message », True
L’objet et le corps peuvent également être des champs provenant du formulaire (du style Me![Nom d’un champ]).
Je l’ai essayée et ça fonctionne bien. Cependant, j’essai de changer le corps du message comme avec la première procédure que vous nous avez montré et je n’y arrive pas.. Je débute en VBA et j’ai beau essayé de toute les manières j’ai toujours une erreur.. C’est que mon corps de message est plutôt long et doit apparaitre sur plusieurs lignes.. Je ne sais pas si je suis claire…
Quoi qu’il en soit merci quand même!! ;o)
pouetpouet 😉 > Si j’ai suivi, il suffit de passer l’adresse email voulue. Dans l’exemple donné, il faudrait remplacer « bill.gates@microsoft.com » par autre chose. Le client peut être un client mail quelconque, de fait. Ou bien… ?
Bonjour, concernant l’envoi de mails directement depuis access 2010, comment définir une messagerie webmail type @me.com ou @gmail.com comme client ?
merci d’avance.
Delphine > Tout ça est faisable, techniquement. Comme il s’agit de construire des mails personnalisés selon chaque personne, je verrais 2 boucles imbriquées :
Chaque boucle parcourt une table, une requête ou une instruction SQL dynamique. Ça veut dire qu’il s’agit de parcourir des Recordsets. Tu as plusieurs exemples d’utilisation de Recordsets DAO sur le blog, ça peut déjà permettre de démarrer. Notamment cet article qui est proche de ce que tu cherches à faire.
Bonjour,
Ma question était-elle trop compliquée ou inréalisable ?? Je suis toujours bloquée dessus mais si vous-même vous n’avez pas de réponse… je suis encore moins confiante.
Cordialement
Bonjour Hervé,
J’ai construi une base de données permettant à un administrateur de rentrer différentes informations en réunion d’entreprise, la date, le lieu, le type, le thème, les personnes présentes, l’action, le pilote et le co-pilote. Tout cela sur un formulaire avec choix par bandes déroulantes reliées à des tables. On peut donc rajouter des lieux, des types, des personnes…
J’ai aussi un formulaire de mise à jour des actions par les pilotes.
Maintenant j’aimerais envoyer un mail à chaque pilote pour lui envoyer ses actions personnelles, on utilise tous outlook à l’entreprise.
Comment puis-je faire ? Boucles ?
Pour l’instant g créer une liste d’adresses mails et j’arrive en un clic à envoyer le même message à tout le monde, mais je voudrais des messages personnels….
Merci d’avance, bonne journée !!
AF > Ça veut dire que la bibliothèque « Microsoft Outlook Object Library » n’est pas attachée au projet VBA. Consulte cet article pour plus de détails.
Bonjour,
J’ai testé les procédures vba d’envoi de mails par le biais d’Access 2003.
Mais lors de la compilation de mon module, j’obtiens l’erreur « Type défini par l’utilisateur non défini » sur la ligne « dim ol as outlook.application ».
Auriez-vous une explication ?
Merci
Diablogy > Tu as bien recopié la procédure
SendMail
dans un module standard ?Bonjour ,
Lorsque j’utilise votre code pour un bouton d’access 2003 j’ai le message d’erreur » SendMail fonction ou sub non définie ».
Merci de m’aider s’il vous plait.
Merci beaucoup, ça fonctionne parfaitement !
Dorian > Dans ce cas, à supposer qu’on soit dans le
Sub/End Sub
du bouton, il faudrait écrire :L’objet et le corps peuvent également être des champs provenant du formulaire (du style
Me![Nom d'un champ]
).Bonjour,
J’ai utilisé les codes ci dessus qui fonctionne très bien.
Cependant, j’aimerais exécuter cette fonction à partir d’un bouton de commande placé sur le formulaire.
(l’utilisateur click sur un bouton « envoyer un mail » à partir du formulaire, il renseigne l’adresse e-mail, et la page Outlook s’ouvre pré-remplie)
Merci d’avance pour votre aide !
jair >
SendObject
prend en charge les destinataires multiples. Il suffit de fournir les adresses (la variable strEmail, donc, dans l’exemple) sous la forme"email1@provider1.com;email2@provider2.com"
.Bonjour,
svp comment envoyer email a plusieurs destinataires? adresse email doivent être séparer avec ‘;’
merci d’avance
Christian > Les portails web en eux-mêmes ne sont pas scriptables facilement. Ils sont juste des interfaces pour des serveurs POP et SMTP. C’est donc plutôt l’adresse de ces serveurs qui serait à utiliser dans Access. Le fait de passer par un logiciel local (Outlook-tout-court ou Outlook Express, ou une couche MAPI…) facilite cet accès. Ce que font SendObject (dans cet article) ou l’Automation Outlook (dans d’autres articles).
A noter que DenisS (participant des forums self-access.com) prépare un complément Access de type « relais SMTP ». Ce qui pourrait faciliter l’envoi de mails sans passer par les couches du dessus. Bientôt dans le grenier 🙂
Bonjour
Peut on créer un envoi de mails avec une appli standard, qui serait installée dans des associations différentes et qui disposeraient de système de messagerie divers ou autres que Outlook ? Autrement dit peut on utiliser directement leur portail en précisant simplement le nom de leur adresse mail ?
Christophe > La gestion de la sécurité est effectivement très lourde sur Outlook, mais ça semble s’améliorer avec Outlook 2007. Il faut par contre quelques conditions supplémentaires pour que tout marche :
SendObject
) par du code pilotant Outlook.Je viens d’ajouter sur le site un article qui explique comment faire. Le bout de code donné en exemple est complètement compatible avec le
SendMail
de cet article-ci. Il suffira donc de remplacer tous lesSendMail
par lesSendOLMail
du nouvel article (ou de renommer lesSub
, au choix).L’article est ici : Expédier des emails via Outlook.
Bonjour,
J’utilise votre procédure SendMail sous Outlook 2007 via Access 2007 afin de confirmer des dates à mes clients.
Cela fonctionne assez bien, cependant, je suis obligé de confirmer l’envoie de chaque message (boîte de dialogue message d’alerte Outlook « Un programme tente d’envoyer un message électronique de votre part »
Auriez-vous une solution pour palier à cette problématique ?
OS : Vista / pas d’anti virus / Office 2007 avec licence
Mercissss