Composant SYSMAIL
Généralités
L'objet INTERFACE du composant SYSMAIL contient des méthodes permettant d'envoyer des courriers électroniques ou e-mails.
Il contient également une méthode permettant de personnaliser des fichiers en remplaçant des jetons par des données. Voir la méthode TRANSFORMER.
Enfin il contient des méthodes pour faire des petits transferts FTP / HTTP.
Deux moyens techniques sont à dispositions :
1. Simple MAPI
MAPI permet d'envoyer des e-mails en utilisant le logiciel de messagerie par défaut. Les e-mails envoyés avec MAPI seront stockés dans les "Eléments envoyés" du logiciel de messagerie.
Simple MAPI est limité dans les options d'envoi : pas de texte riche dans le corps de l'e-mail, pas d'accusé de réception (dépend du logiciel) ...
La version "Simple" de MAPI est un sous ensemble de fonctions basiques de MAPI (Extended).
Remarque : par souci de sécurité, certains logiciels peuvent afficher un message demandant confirmation avant l'envoi si l'email n'a pas été affiché à l'écran par la messagerie. (Utiliser la valeur 8 du paramètre flags de la méthode NOUVELLE_SESSION_SIMPLE_MAPI).
2. SMTP
L'utilisation du protocole SMTP permet de communiquer directement avec le serveur de courrier. Cela est plus rapide et autorise toutes les options.
Mais attention car il faut absolument connaître l'adresse du serveur SMTP (ainsi que le port utilisé si ce n'est pas celui par défaut).
Principe d'utilisation du composant
Pour envoyer un message, il vous faut utiliser plusieurs méthodes du composant.
Vous devez :
créer une session suivant votre choix de technologie (SMTP ou MAPI)
créer un nouveau message : un ID est attribué au message pour les fonctions suivantes
définir les propriétés du message (destinataires, contenu ...)
envoyer le message
éventuellement, créer et envoyer d'autres messages
fermer la session
Méthodes pour l'envoi d'email
Description des valeurs des erreurs
Méthode de transformation de texte (interprétation de formules) :
Méthodes FTP / HTTP :
La méthode NOUVELLE_SESSION_SMTP
Création d'une nouvelle session SMTP. L'authentification est nécessaire selon les serveurs.
Il est préférable d'utiliser la méthode NOUVELLE_SESSION pour profiter du paramétrage de l'utilisateur.
Paramètres :
Double Reference id_session ("ID de la session")
ID de la session
Chaine serveur ("Serveur SMTP")
Serveur smtp, obligatoire (ex: smtp.wanadoo.fr ou 200.169.52.126)
Entier port ("Port SMTP")
Port smtp, facultatif (par défaut 25)
Chaine domaine_exp ("Domaine de l'expéditeur, facultatif")
Domaine ou nom de la machine émettrice, facultatif.
Certains serveur nécessitent cette donnée. Si le domaine est vide, il est rempli par le nom complet de l'ordinateur (ex: machine1.masociete.fr).
Entier securite ("Type de sécurité TLS/SSL, facultatif")
Type de sécurité : 0=aucune, 1=STARTTSL, 2=SSL
Chaine code_utilisateur ("Utilisateur")
Code utilisateur pour l'authentification.
Chaine motDePasse ("Mot de passe")
Mot de passe pour l'authentification. Attention, si on récupère le mot de passe saisi via le paramétrage utilisateur, il est crypté. Faire précéder la chaine par "Crypte:".
La méthode NOUVELLE_SESSION_SIMPLE_MAPI
Création d'une nouvelle session Simple MAPI. Il est préférable d'utiliser la méthode NOUVELLE_SESSION pour profiter du paramétrage de l'utilisateur.
Paramètres :
Double Reference id_session ("ID de la session")
ID de la session
Chaine code_profil ("Nom du profil/compte")
nom du profil, facultatif et limité à 256 caractères.
Le profil n'est pas un compte (autre adresse e-mail) mais un ensemble de paramètres et/ou comptes dans votre messagerie : Voir "Courrier" dans le Panneau de configuration.
A part pour Exchange, généralement, il est inutile de préciser le profil.
Chaine motDePasse ("Mot de passe du profil/compte")
Mot de passe du profil, facultatif
Double flags ("Paramètres supplémentaires (flags MAPI)")
Flags (options) MAPI, facultatif. Consultez, sur MSDN, les fonctions MAPILogon et MAPISendMail.
Principales valeurs (additionner les valeurs pour utiliser plusieurs options) :
1 |
Force l'affichage de la fenêtre de choix du profil |
2 |
Force la création d'une nouvelle session plutôt que d'en récupérer une existante |
8 |
Force l'affichage de la fenêtre de rédaction du message pour le modifier avant l'envoi |
4096 |
Force le téléchargement des messages avant toute action |
131072 |
Force l'affichage de la fenêtre de saisie du mot de passe |
La méthode NOUVELLE_SESSION
Création d'une nouvelle session SMTP ou Simple MAPI selon le paramétrage défini au niveau de l'utilisateur en cours. Ce paramétrage est accessible dans Oxygène depuis la fiche de gestion de l'utilisateur.
Un message créé dans cette session reprendra automatiquement les autres paramètres comme l'adresse d'expéditeur (via AJOUTER_ADRESSE From ...) et les options (via MESSAGE_PARAMETRES). Remarque : les options seront modifiables contrairement à l'adresse de l'expéditeur.
Paramètres :
Double Reference id_session ("ID de la session")
ID de la session
Double flags ("Paramètres supplémentaires (flags MAPI)")
Flags optionnels si session MAPI (cf. NOUVELLE_SESSION_SIMPLE_MAPI)
La méthode NOUVEAU_MESSAGE
Création d'un nouveau message.
Paramètres :
Double Reference id_message ("ID du message")
ID du message
Chaine sujet ("Objet du message",256)
Sujet (ou objet), facultatif et limité à 256 caractères
La méthode MESSAGE_SUJET
Définit ou modifie le sujet.
Paramètres :
Double id_message ("ID du message")
ID du message
Chaine sujet ("Objet du message",256)
Sujet (ou objet), facultatif et limité à 256 caractères
La méthode MESSAGE_TEXTE
Définit ou modifie le contenu du message et son format.
Si le format est de l'html, on recherche les références aux images et si ces dernières existent sur le disque dur, on les ajoute en tant que pièces jointes invisibles. Attention : les images avec des chemins relatifs ne peuvent être retrouvées que si 'texte' désigne un nom de fichier.
Quand on rédige un message en HTML, on peut ajouter son équivalent en texte brut pour les clients de messagerie ne supportant pas l'HTML (faire un deuxième appel à cette méthode).
Paramètres :
Double id_message ("ID du message")
ID du message
Chaine texte ("Contenu du message")
Contenu du message, facultatif. Si texte commence par "f:", la suite doit désigner un nom de fichier à lire.
Entier html ("Le texte est en HTML [Vrai|Faux]")
Si html vaut true, texte est de l'HTML sinon c'est du texte brut (HTML uniquement pour SMTP)
La méthode MESSAGE_PARAMETRES
Définit les paramètres d'un message. Ces paramètres sont gérés uniquement par une session SMTP sauf pour la confirmation de lecture.
Paramètres :
Double id_message ("ID du message")
ID du message
Entier priorite_msg ("Priorité du message [1(très haute);5]")
priorité du message de 1(très haute) à 3(normale) et à 5 (très basse), facultatif
Entier accuseReception ("Demande d'accusé de réception [Vrai|Faux]")
demande d'un accusé de réception (accusé de remise), facultatif (le serveur du destinataire a accepté le message)
Entier confirmationLecture ("Demande de confirmation de lecture [Vrai|Faux]")
demande d'une confirmation de lecture (message affiché sur l'écran du destinataire), facultatif.
Dans nos tests, cette option a fonctionné avec Outlook 2003 mais pas avec Outlook Express XP ni Thunderbird 1.7.
La méthode AJOUTER_ADRESSE
Définit l'adresse de l'expéditeur ou ajoute des destinataires. On ne peut pas définir d'expéditeur dans une session Simple MAPI puisqu'il est défini dans le profil.
Paramètres :
Double id_message ("ID du message")
ID du message
Chaine type ("Type [From|To|CC|BCC]")
type expéditeur ou destinataire (From, To, CC ou BCC), obligatoire
Chaine adresse ("Adresse email")
adresse valide (ex: dv@truc.fr), obligatoire
Chaine nom ("Désignation")
nom complet (ex: David Vincent), facultatif. Attention, pour certains programmes MAPI (comme Outlook 2003), la saisie du nom est obligatoire.
La méthode AJOUTER_ADRESSES
Ajoute les adresses contenues dans une liste.
Paramètres :
Double id_message ("ID du message")
ID du message
Chaine type ("Type [From|To|CC|BCC]")
type expéditeur ou destinataire ou vérification (From, To, CC, BCC ou vérification), obligatoire
Chaine adresses ("Adresses email")
liste d'adresses, facultative.
Voici le format (guillemets facultatifs et désignation facultative) : "désignation" <nom@domaine.fr>. Les adresses doivent être séparée par des points virgules. Entre < et >, les espaces sont interdits.
Exemple : "Contact" <contact@memsoft.fr>; Sylvain Furlan<sfurlan@memsoft.fr> ; <support@memsoft.fr>
La méthode AJOUTER_FICHIER
Ajoute un fichier (ou pièce jointe). Si le fichier existe déjà (comparaison sur le chemin), le fichier n'est pas ajouté.
Paramètres :
Double id_message ("ID du message")
ID du message
Chaine chemin ("Chemin d'accès complet")
chemin complet du fichier (ex: c:\documents\facture.pdf), obligatoire
La méthode VERIFIER_MESSAGE
Contrôle la validité d'un message, c'est à dire vérification de la présence : de l'adresse de l'expéditeur, d'au moins une adresse de destinataire, d'une adresse de serveur (si SMTP) et d'au moins une information (sujet, texte, contenu HTML (si SMTP) ou pièce jointe).
Paramètres :
Double id_session ("ID de la session")
ID de la session
Double id_message ("ID du message")
ID du message
La méthode ENVOYER_MESSAGE
Envoi réel du message.
Paramètres :
Double id_session ("ID de la session")
ID de la session
Double id_message ("ID du message")
ID du message
La méthode EFFACER_MESSAGE
Efface un message avec les adresses et les fichiers
Paramètres :
Double id_message ("ID du message")
ID du message
La méthode EFFACER_ADRESSES
Efface toutes les adresses du message.
Paramètres :
Double id_message ("ID du message")
ID du message
La méthode EFFACER_FICHIERS
Efface tous les fichiers (pièce jointes) du message.
Paramètres :
Double id_message ("ID du message")
ID du message
La méthode TEXTE_ERREUR
Traduit une valeur d'erreur en texte descriptif.
Paramètres :
Chaine Reference texte
Texte qui recevra la description de l'erreur.
Entier erreur
Valeur de l'erreur (ErreurRendue).
La méthode TERMINER_SESSION
Termine une session qu'elle soit SMTP ou Simple MAPI.
Paramètres :
Double id_session ("ID de la session")
ID de la session
La méthode ACTIVER_LOG
Active l'écriture dans oxydev\systeme\bin\sendmail.log de toute la communication avec le serveur SMTP.
Appelez cette méthode avant ENVOYER_MESSAGE.
Obsolète : il suffit de créer un fichier sendmail.log dans le répertoire oxydev\systeme\bin pour qu'il soit automatiquement rempli lors d'une connexion SMTP. Penser à supprimer ce fichier après vos tests.
Paramètres :
Entier activer ("Activer le log O/N")
Si 1, active le log.
La méthode MUET
Désactive l'affichage des BoiteMessage lors des erreurs. On peut toujours récupérer les codes erreurs avec ErreurRendue.
Paramètres :
Entier param ("Rendre muet 0/1")
Si 1, désactive les messages d'erreur..
Exemples
Voici un exemple simple envoyant un e-mail par SMTP avec une pièce jointe.
Double session // ID de ma session
Double message // ID de mon message
Chaine txt // texte du message
Chaine piece // chemin de la pièce jointe
txt = "Bonjour, ci-joint un document important. Cordialement" piece = "C:\Documents\alerte.doc"
AppliquerMethodeComposant "SYSMAIL"."NOUVELLE_SESSION_SMTP" (session,"smtp.truc.fr")
AppliquerMethodeComposant "SYSMAIL"."NOUVEAU_MESSAGE" (message,"Alerte !")
AppliquerMethodeComposant "SYSMAIL"."AJOUTER_ADRESSE" (message,"From","dv@truc.fr","David Vincent")
AppliquerMethodeComposant "SYSMAIL"."AJOUTER_ADRESSE" (message,"To","pj@machin.net")
AppliquerMethodeComposant "SYSMAIL"."MESSAGE_TEXTE" (message,txt,0)
AppliquerMethodeComposant "SYSMAIL"."AJOUTER_FICHIER" (message,piece)
AppliquerMethodeComposant "SYSMAIL"."ENVOYER_MESSAGE" (session,message) Si ErreurRendue Alors
AppliquerMethodeComposant "SYSMAIL"."TEXTE_ERREUR" (txt,ErreurRendue)
BoiteMessage "Echec de l'envoi du message : "+txt
FinSi
AppliquerMethodeComposant "SYSMAIL"."EFFACER_MESSAGE" (message)
AppliquerMethodeComposant "SYSMAIL"."TERMINER_SESSION" (session)
Voici un exemple simple utilisant les préférences définies au niveau de l'utilisateur Oxygène :
Double session, message
Entier erreur ; Chaine sujet, txt
AppliquerMethodeComposant SYSMAIL.NOUVELLE_SESSION (session)
AppliquerMethodeComposant SYSMAIL.NOUVEAU_MESSAGE (message,sujet)
AppliquerMethodeComposant SYSMAIL.AJOUTER_ADRESSE (message,"To","dv@truc.fr","David Vincent")
AppliquerMethodeComposant SYSMAIL.MESSAGE_TEXTE (message,txt)
AppliquerMethodeComposant SYSMAIL.ENVOYER_MESSAGE (session,message)
erreur = ErreurRendue
AppliquerMethodeComposant SYSMAIL.EFFACER_MESSAGE (message)
AppliquerMethodeComposant SYSMAIL.TERMINER_SESSION (session)
Description des valeurs des erreurs
Voici la signification des valeurs retournées par les méthodes d'envoi d'e-mail.
Si une valeur n'est pas décrite ci dessous, elle correspond à une erreur des fonctions MAPI.
Valeur | Description |
---|---|
0 | Pas d'erreur / RAS / tout est OK |
1001 | L'application n'a pu trouver le serveur demandé. Vérifiez que vous avez correctement saisi l'adresse du serveur smtp. |
1002 | Vous n'avez pas spécifié de serveur smtp. Envoi impossible. |
1003 | Le programme n'a pu établir de connexion à Internet. Vérifiez votre connexion et autorisez ce programme à accéder à Internet. |
1004 | Impossible de se connecter au serveur smtp. |
1005 | Vous n'avez pas spécifié d'adresse d'expéditeur. Envoi impossible. |
1006 | Vous n'avez pas spécifié d'adresse de destinataire. Envoi impossible. |
1007 | Votre message ne contient aucune information. Mettez un sujet, un contenu ou une pièce jointe. Envoi impossible. |
1008 | Le serveur n'a pas répondu à au moins une des requêtes envoyées. Il se peut que votre mail n'est pas été envoyé correctement. |
1009 | L'adresse mail est vide. |
1010 | Le chemin du fichier est vide. |
1011 | Le nombre maximum d'adresses est atteint. |
1012 | Le nombre maximum de fichiers est atteint. |
1013 | Impossible d'envoyer les données (erreur socket). |
1014 | Fichier inexistant. |
1015 | Session inexistante (ID null). |
1016 | Message inexistant (ID null). |
1017 | L'adresse est incorrecte. |
1018 | La syntaxe saisie est incorrecte. |
La méthode TRANSFORMER
Cette méthode permet de personnaliser des fichiers en remplaçant des jetons par des données.
Cela fonctionne pour tout fichier ayant un codage ASCII comme les fichiers TXT, HTM, RTF, MHT, XML, CSV ... mais pas pour les fichiers codés en binaire comme les documents Microsoft Word, Excel, PDF, ...
Le principe est le remplacement de jetons par leur valeur dans du texte. Un jeton est une expression L4G entre une balise de début et une balise de fin : [# expression #]. L'expression L4G est interprétée donc elle peut être une variable ou un champ avec ou sans condition tout comme dans un état.
Ce traitement peut traiter plusieurs enregistrements de la table principale selon les filtres. Le chemin du fichier résultat doit être interprétable de façon à donner des noms distincts pour chaque enregistrement. Si aucun chemin n'est donné, la méthode reprend le nom du fichier d'entrée en insérant, avant l'extension, la valeur du premier champ.
On travaille sur une table principale mais on peut également gérer une autre table pour, par exemple, afficher les lignes d'un document. Cette table est dite de liste ou des lignes ; pour définir le début et la fin de la liste, il faut utiliser les jetons [#DEBUT_LISTE#] et [#FIN_LISTE#] (respecter la casse). Les champs de cette table sont accessibles par le contexte LISTE.
Fonctionnement :
Lecture du fichier modèle et contrôles
Filtre sur la table principale et calcul des variables locales ($DATE, $HEURE, $JOUR, $MOIS, $ANNEE, $LDATE)
Pour chaque fiche de la table principale :
Lecture des interfaces des fiches en liens suivant les liens composants définis dans la table (pas de lecture des liens relationnels)
filtre et contrôle pour les lignes
Recherche séquentielle des jetons et interprétation
Sauvegarde dans un nouveau fichier
Exemples formats de documents codés en ASCII :
HTML :
+ peut être mis en corps d'email (SMTP)
- images enregistrées à l'extérieur du fichier
- conversion pas toujours idéale avec Word
RTF :
+ images intégrées
- images converties en BMP d'où une taille décuplée
- ne pas être dans un corps d'email (sauf avec MAPI (Extended))
MHT :
+ idem format HTML mais les images sont ajoutées à la fin du fichier
- lisible uniquement sur une plateforme Windows
- ne pas être dans un corps d'email
TXT :
+ peut être en corps d'email
- pas de formatage de texte, pas d'images
Remarques :
On utilise les bornes [# et #] car elles sont inchangées lors de l'enregistrement sous Word en RTF et HTML (< est changé en &rt; en HTML).
On peut ainsi personnaliser un document créé avec Microsoft Word mais ce document doit être enregistré sous un format dit ASCII (HTML, RTF, MHT ou TXT) et non en tant que .doc car ce format est codé en binaire. De plus, l'enregistrement d'un RTF sous Word peut casser vos balises : formatez le document avec Word puis resauvegardez-le avec WordPad.
Paramètres :
Chaine p_fichier
Chemin et nom du fichier modèle
Chaine p_fichier_resultat
Chemin et nom du fichier à générer.
Peut être une chaîne à interpréter pour générer les noms de fichiers
Exemple : """c:\documents\piece"""+TABLE.NUMERO_DOC+""".rtf"""
Chaine p_base
Code de la base de données
Chaine p_table
Code de la table principale
Chaine p_filtre
Filtre sur la table principale.
Exemple : "DATE_CREATION {SuperieurA} ""31/12/2005"""
Pour obtenir un filtre, on peut appeler l'objet suivant :
AppelerObjet "$$"."$FLTR" (p_filtre, 1, p_base, p_table, "" )
Chaine p_monnaie
Identifiant de la monnaie principale
Date p_monnaie_date
Date du cours de la monnaie
Double p_monnaie_cours
Valeur du cours de la monnaie
Chaine p_liste
Table des lignes
Chaine p_liste_filtre
Filtre sur la table des lignes. Les champs doivent être préfixés par le contexte LISTE.
Exemple : "LISTE.NUMERO {DebutePar} IDENT+""|"""
Pour obtenir un filtre, on peut appeler l'objet suivant :
AppelerObjet "$$"."$FLTR" (p_liste_filtre, 1, p_base, p_liste, "LISTE" )
Chaine p_liste_tri
Code du champ pour le classement. Le champ doit avoir un index séquentiel.
Pour obtenir un champ de classement, on peut appeler l'objet suivant :
AppelerObjet "$$"."$ORDR" (p_liste_tri,1, p_base, pliste,"")
ErreurRendue :
1 : Pas de fichier modèle valide
2 : Base <p_base> introuvable
3 : Table <p_table> introuvable dans la base <p_base>
4 : Table secondaire <p_liste> introuvable dans la base <p_base>
5 : Une balise de début existe sans balise de fin
On peut utiliser la méthode MUET pour afficher ou non les messages d'erreurs.
Fonctions FTP (à partir de la 8.11)
Des fonctions basiques de communication via le protocole FTP sont disponibles. On utilise la bibliothèque .net C# System.Net.FtpClient.
L'historique des commandes échangées avec le serveur FTP peut être sauvegardé dans un journal en créant le fichier oxydev\systeme\bin\ftp.log.
La méthode FTP_CONNECT
Connexion à un serveur avec nom d'utilisateur et mot de passe. Penser à se déconnecter avec la méthode FTP_DISCONNECT.
Parametres :
Chaine pServeur
Nom du serveur par adresse IP ou nom DNS.
Chaine pUtilisateur
Nom de l'utilisateur sur le serveur FTP
Chaine pMotDePasse
Mot de passe de pUtilisateur
La méthode FTP_STATUS
Récupère le texte du statut de la dernière action.
Parametres :
Chaine Reference pMsg
ErreurRendue :
0: non initialisé (FTP_CONNECT non fait)
1: non connecté (échec de connexion)
2: connecté
La méthode FTP_CAPABILITIES
Donne la liste des propriétés et des fonctions supportées par le serveur.
Parametres :
Chaine Reference pCapabilities
La méthode FTP_PUT
Envoi d'un fichier local sur le serveur FTP.
Parametres :
Chaine pFichierSrc
Chemin complet du fichier local.
Chaine pFichierDst
Chemin complet du fichier de destination.
La méthode FTP_GET
Téléchargement d'un fichier du serveur FTP sur un fichier local.
Parametres :
Chaine pFichierDst
Chemin complet du fichier distant.
Chaine pFichierSrc
Chemin complet du fichier local.
La méthode FTP_DISCONNECT
Déconnexion du serveur FTP.
Exemple FTP
Exemple simple d'envoi d'un fichier PDF local sur le serveur FTP :
AppliquerMethodeComposant SYSMAIL.FTP_CONNECT ("ftp.memsoft.fr",
"Kevin", vFTPMotDePasse)
AppliquerMethodeComposant SYSMAIL.FTP_PUT ("C:\test\facture.pdf",
"/fact/fact01.pdf")
Variables : Chaine msg
AppliquerMethodeComposant SYSMAIL.FTP_STATUS (msg)
Si ErreurRendue<>2 Alors
BoiteMessage "put:"+ msg + SautDeLigne +"ErreurRendue:"
+ ErreurRendue
FinSi
AppliquerMethodeComposant SYSMAIL.FTP_DISCONNECT
La méthode HTTP_DOWNLOAD
Télécharge le contenu d'un fichier texte sur un serveur http. A n'utiliser que sur des petits fichiers, car il n'y a pas de jauge de progression ni moyen d'annuler le traitement.
Si le paramètre pDestination est vide, la méthode retourne le contenu du fichier dans celui-ci. Sinon mettre le chemin local du fichier dans lequel écrire le résultat.
NB : Le téléchargement se fait via l'ActiveX Msxml2.XMLHTTP.3.0. A partir de la 9.01.11.
Parametres :
Chaine pURL ("URL/Chemin http du fichier")
Chaine Reference pDestination ("Chemin du fichier de destination ou contenu")
Entier pTimeOut ("Délai max d'attente en secondes")
Entier pUTF8 ("Vrai=Ecrire le fichier en UTF8")