Envoi d'e-mail
Par
Mélinda GALLO, 4D Today Note technique 4D-200210-32-FR Version 1
Date 10 Octobre 2002
Résumé
Cette note technique explique comment envoyer un email à partir d’un serveur de messagerie qui nécessite l’authentification. Au lieu d’utiliser la commande
4D Notes techniques
Copyright © 1985-2003 4D SA - Tous droits réservés
Tous les efforts ont été faits pour que le contenu de cette note technique présente le maximum de fiabilité possible.
Néanmoins, les différents éléments composant cette note technique, et le cas échéant, le code, sont fournis sans garantie d'aucune sorte.
L'auteur et 4D S.A. déclinent donc toute responsabilité quant à l'utilisation qui pourrait être faite de ces éléments, tant à l'égard de leurs utilisateurs que des tiers.
Les informations contenues dans ce document peuvent faire l'objet de modifications sans préavis et ne sauraient en aucune manière engager 4D SA. La fourniture d u logiciel décrit dans ce document est régie par u n octroi de licence dont les termes sont précisés par ailleurs dans la licence électronique figurant sur le support d u Logiciel et de la Documentation afférente. Le logiciel et sa documentation ne peuvent être utilisés, copiés o u reproduits sur quelque support que ce soit et de quelque manière que ce soit, que conformément aux termes de cette licence.
Aucune partie de ce document ne peut être reproduite o u recopiée de quelque manière que ce soit, électronique o u mécanique, y compris par photocopie, enregistrement, archivage o u tout autre procédé de stockage, de traitement et de récupération d'informations, pour d'autres buts que l'usage personnel de l'acheteur, et ce exclusivement aux conditions contractuelles, sans la permission explicite de 4D SA.
4D, 4D Calc, 4D Draw, 4D Write, 4D Insider, 4ème Dimension ®, 4D Server, 4D Compiler ainsi que les logos 4e Dimension, sont des marques enregistrées de 4D SA.
Windows,Windows NT,Win 32s et Microsoft sont des marques enregistrées de Microsoft Corporation.
Apple, Macintosh, Power Macintosh, LaserWriter, ImageWriter, QuickTime sont des marques enregistrées o u des noms commerciaux de Apple Computer,Inc.
Mac2Win Software Copyright © 1990-2002 est un produit de Altura Software,Inc.
4D Write contient des éléments de "MacLink Plus file translation", un produit de DataViz, Inc,55 Corporate drive,Trumbull,CT,USA.
XTND Copyright 1992-2002 © 4D SA. Tous droits réservés.
XTND Technology Copyright 1989-2002 © Claris Corporation.. Tous droits réservés ACROBAT © Copyright 1987-2002, Secret Commercial Adobe Systems Inc.Tous droits réservés. ACROBAT est une marque enregistrée d'Adobe Systems Inc.
Tous les autres noms de produits ou appellations sont des marques déposées ou des noms commerciaux appartenant à leurs propriétaires respectifs.
Email_QuickSend
par Melinda Gallo (Routines écrites par Dave Batton)
Dans la version 6.8.2 b2 des Internet Commands, une nouvelle commande, SMTP_Auth, y a été ajoutée. Avec celle-ci, vous pouvez faire l’authentification du serveur SMTP lors de l’envoi des emails.
Cette note technique explique comment envoyer un email à partir d’un serveur de messagerie qui nécessite l’authentification. Au lieu d’utiliser la commande SMTP_QuickSend qui ne nécessite pas l’authentification, vous pouvez remplacer vos appels àSMTP_QuickSend par la routineEmail_QuickSend en ajoutant le mot de passe en dernier paramètre.
Base exemple
Voici un exemple d’utilisation de Email_QuickSend qui remplace la commande SMTP_QuickSend.
1. Lancez la base Démo Email.
La fenêtre suivante s’affiche :
2. Saisissez le nom du host de l’expéditeur (serveur SMTP).
Cette valeur doit être au format “mail.host.com”.
3. Saisissez l’adresse email de l’expéditeur.
Ensuite, vous devez saisir le mot de passe de ce compte email après avoir cliqué sur le bouton Envoyer.
4. Saisissez l’adresse email du destinataire, le sujet de l’email, et le message.
Tous ces champs sont obligatoires.
5. Cliquez sur le bouton Envoyer.
La fenêtre suivante s’affiche :
Le mot de passe est vérifié par le serveur SMTP. S’il est correct, l’email est envoyé au destinataire.
Structure
Dans la base exemple, nous avons un seul formulaire, “envoiEmail” :
Méthode formulaire
Dans la méthode formulaire, nous initialisons les variables du formulaire : Au cas ou
: (Evenement formulaire=Sur chargement )
C_ALPHA(80;vnomHost;vexpéditeur;vdestinataire;vsujet) C_TEXTE(vmessage)
vnomHost:=" "
vexpéditeur:=" "
vdestinataire:=""
vsujet:=""
vmessage:="Voici un MESSAGE qui sera envoyé par la fonction Email_QuickSend."
Fin de cas
Méthode objet du bouton Envoyer
Dans la méthode objet du bouton Envoyer, nous vérifons que tous les champs ont été bien remplis et puis nous appelons la méthode envoyerEmail :
Au cas ou : (vnomHost="")
ALERTE("Il faut saisir le nom du host.") : (vexpéditeur="")
ALERTE("Il faut saisir votre adresse email.") : (vdestinataire="")
ALERTE("Il faut saisir une adresse email à laquelle il faut envoyer ce MESSAGE.") : (vsujet="")
ALERTE("Il faut saisir un sujet.") : (vmessage="")
ALERTE("Il faut saisir un MESSAGE.") Sinon
envoyerEmail (vnomHost;vexpéditeur;vdestinataire;vsujet;vmessage) Fin de cas
Méthode envoyerEmail
Cette méthode objet du bouton Envoyer, nous vérifons que tous les champs ont été bien remplis et puis nous appelons la méthode envoyerEmail. La syntaxe de cette méthode ressemble à celle de la commande SMTP_QuickSend sauf qu’il y a un paramètre supplémentaire pour passer le mot de passe.
C_ALPHA(80;$1;$2;$3;$4;$nomHost;$expéditeur;$destinataire;$sujet) C_TEXTE($5;$message)
$nomHost:=$1
$expéditeur:=$2
$destinataire:=$3
$sujet:=$4
$MESSAGE:=$5
$motdepasse:=Demander("Saisissez votre mot de passe : ") Si (OK=1)
$error:=Email_QuickSend ($nomHost;$expéditeur;$destinataire;$sujet;$MESSAGE;$motdepasse) Fin de si
Email_QuickSend
Email_QuickSend (nomHost; expéditeur; destinataire; sujet; message; motdepasse) ParamètreType Description
nomHost Alpha Le nom du serveur SMTP expéditeur Alpha L’adresse email de l’expéditeur destinataireAlpha L’adresse email du destinataire sujet Alpha Le sujet de l’email
message Texte Le message de l’email
motdepasse Alpha Le mot de passe de l’adresse expéditeur
La méthode Email_QuickSend vous permet d’envoyer un email avec le sujet et message à destinataire du compte emailexpéditeur. Si votre serveur SMTP nécessite l’authentification, vous passez motdepasse. Sinon, utilisez la routine SMTP_QuickSend.
$smtpServer:=$1
$expéditeur:=$2
$destinataire:=$3
$sujet:=$4
$MESSAGE:=$5
$motdepasse:=$6
` Créer l'en-tête et vérifier qu'aucune erreur n'est survenue ` Email_HandleSMTPError est un wrapper qui traite les erreurs
` Cette méthode accepte le nom de la commande et le résultat en tant que ` paramètres et renvoie un booléen.
` Si elle renvoie Vrai, elle s'est exécutée avec succès. Sinon, elle renvoie ` Faux. De plus, elle fixe la variable système Error
Au cas ou
: (Non(Email_HandleSMTPError ("SMTP_New";SMTP_New ($smtpID))))
: (Non(Email_HandleSMTPError ("SMTP_Host";SMTP_Host ($smtpID;$smtpServer)))) `
: (Non(Email_HandleSMTPError ("SMTP_Auth";SMTP_Auth ($smtpID;$expéditeur; $motdepasse)))) : (Non(Email_HandleSMTPError ("SMTP_From";SMTP_From ($smtpID;$expéditeur))))
: (Non(Email_HandleSMTPError ("SMTP_To";SMTP_To ($smtpID;$destinataire)))) : (Non(Email_HandleSMTPError ("SMTP_Subject";SMTP_Subject ($smtpID;$sujet)))) : (Non(Email_HandleSMTPError ("SMTP_Body";SMTP_Body ($smtpID;$MESSAGE;2)))) Sinon
Email_HandleSMTPError ("SMTP_Send";SMTP_Send ($smtpID)) Si ($smtpID#0)
Email_HandleSMTPError ("SMTP_Clear";SMTP_Clear ($smtpID)) Fin de si
Fin de cas
$0:=Error ` Renvoyer l'erreur
Email_HandleSMTPError
Email_HandleSMTPError (commande; erreur) -> Booléen Paramètre Type Description
commande Texte Le nom de la commande exécutée erreur Entier long Le numéro de l’erreur
La méthode Email_HandleSMTPError, qui est une routine “wrapper”, renvoie le numéro d’erreur dans la variable système ErrorS iune erreur est survenue. Cette routine renvoie Vrai S i aucune erreur n’est survenue.
Sinon elle renvoie Faux.
Cette méthode est appelée dans la méthode Email_QuickSend à chaque appel à des Internet Commands. S i une erreur survient, une ALERTE s’affiche indiquant le numéro de l’erreur et la commande qui a provoqué l’erreur.
Voici le code de la routine Email_HandleSMTPError :
C_BOOLEEN($0)
C_TEXTE($1;$commande) C_ENTIER LONG($2;$erreur)
$commande:=$1 `Nom de la commande
$erreur:=$2 `Numéro de l'erreur (zéro si aucune erreur n'est survenue) Si ($erreur=0) `Pas d'erreur
$0:=Vrai
Sinon `Une erreur est survenue
$0:=Faux
ALERTE ("Erreur e-mail : "+Chaine($erreur))
Error:=$erreur `Renvoyer le numéro de l'erreur dans la variable système Error Fin de si