La classe Mail
cs.bspkComponent.Mail envoie un e-mail par SMTP, Microsoft 365 ou Gmail. Le serveur est lu dans les fichiers de paramètres, le corps peut venir d'un modèle HTML, les pièces jointes sont gérées, et les destinataires sont automatiquement redirigés sur les machines de développement et de préproduction.
Envoyer un mail
var $Mail : cs.bspkComponent.Mail
var $vo_Status : Object
$Mail:=cs.bspkComponent.Mail.new("Votre commande"; ""; $vt_Email) // sujet ; message ; destinataire
$Mail.setMessageFromTpl("commandeConfirmee.html"; {prenom: $User.firstName; reference: $Order.ref})
$Mail.addAttachements($vt_CheminPdf; "Facture.pdf")
$vo_Status:=$Mail.send()
If ($vo_Status=Null) || (Not(Bool($vo_Status.success)))
// non envoyé
End if
Les trois paramètres du constructeur sont facultatifs.
Configurer
La classe lit Storage.vo_Param, c'est-à-dire les fichiers de paramètres :
| Clé | Rôle |
|---|---|
vo_Mail.vt_Host, vl_Port, vt_User, vt_Password | Le serveur SMTP. |
vo_Mail.vt_Forwarder | L'expéditeur par défaut. |
vo_Mail.vb_AcceptUnsecureConnection | Accepter une connexion non chiffrée. |
vo_MS365OAuth2 : vt_ClientId (obligatoire), vt_ClientSecret, vt_Tenant (common), vt_Permission (service), vt_Scope, vt_RedirectURI, vt_UserId | Envoi par Microsoft 365 (Graph, via 4D NetKit). En mode service sans secret client, la classe revient au SMTP. La boîte d'envoi est vt_UserId, à défaut l'expéditeur. |
vo_GoogleOAuth2 : clientId (obligatoire), clientSecret, redirectURI, scope (gmail.send), accessType (offline), name, permission (signedIn) — sans préfixe vt_ | Envoi par Gmail. Demande un jeton déjà obtenu et stocké : l'autorisation Google n'est pas fournie par le composant. |
vt_RedirectMail, vo_RedirectMapping | La redirection, ci-dessous. |
setServer($host; $port; $user; $password), setOAuth2($obj) et setOAuth2Google($obj) remplacent cette configuration pour une instance.
Renseignez toujours
vo_Mail. Sans lui, la classe se rabat sur des réglages par défaut qui ne sont pas ceux de votre application.
Les fonctions
| Fonction | Ce qu'elle fait |
|---|---|
setSubject($texte) | Remplace le sujet. En mode DEV, le préfixe [DEV] est ajouté. |
setMessage($texte) | Le même texte en corps texte et en corps HTML. |
setMessageFromTpl($chemin; $params; $langue) | Le corps HTML depuis un modèle, ci-dessous. |
setRecipient($adresse) | Remplace le destinataire. Les espaces sont retirés ; l'adresse doit être valide (plusieurs adresses séparées par , ou ;). |
setRecipients($collection) | Ajoute des destinataires. |
setCC($texteOuCollection), setBcc(…) | Ajoutent des copies ; une adresse invalide est ignorée sans message. |
setReplyTo($adresse) | Ignorée si l'adresse est invalide. |
setFrom($adresse) | Vide ou invalide : vo_Mail.vt_Forwarder. |
addAttachements($doc; $nom; $cid; $type; $disposition) | Orthographié Attachements. Un texte est le chemin d'un document existant (ignoré sinon). $cid et "inline" pour une image affichée dans le HTML. |
setLogFile($chemin) | Le fichier doit déjà exister. |
send() → Object | Gmail si configuré, sinon Microsoft 365 si configuré, sinon SMTP. Renvoie le statut (success, status, statusText). Renvoie Null s'il manque un élément obligatoire : serveur, sujet, corps, destinataire ou expéditeur. |
Les modèles
setMessageFromTpl("commandeConfirmee"; $params; "fr") :
.htmlest ajouté si le nom n'a pas d'extension.htmlou.htm, et le chemin est cherché sousMail/dans le dossier web de votre projet (en généralBWEB/Mail/commandeConfirmee.html).- Le modèle passe par
PROCESS 4D TAGS: dans le modèle, l'objet de paramètres est$1(<!--#4DTEXT $1.prenom--> : Indéfinie). - La langue (
"fr") remplace celle du process le temps du traitement, pour les traductions du modèle — seulement si une langue est déjà posée, c'est-à-dire dans une requête web. Dans un worker ou une tâche planifiée, elle est ignorée.
Modèle introuvable : le corps est vide, sans erreur, et l'envoi réussit quand même. Vérifiez le chemin.
La redirection en développement et en préproduction
En mode DEV ou PREPROD seulement (voir Les fichiers de paramètres), setRecipient et setRecipients envoient à :
vo_RedirectMapping[<nom de la machine>], une adresse par poste ; sinonvt_RedirectMail, s'il n'est pas vide ; sinon- personne d'autre : le vrai destinataire.
Le sujet devient alors [REDIRECTION DEV MODE][<destinataire d'origine>] ….
- Les copies (
setCC,setBcc) ne sont jamais redirigées. Sur une machine de développement qui travaille sur des données réelles, une copie à un client part chez le client. - Appelez
setSubjectavantsetRecipient:setSubjectremplace le sujet et efface la mention de redirection. Le constructeur les appelle dans le bon ordre.
Quand l'envoi échoue
Par SMTP ou Microsoft 365, un échec déclenche un rapport d'erreur envoyé à l'adresse des mails d'erreur. Par Gmail, aucun rapport : lisez le statut renvoyé.
Bon à savoir
- Avec Microsoft 365, une pièce jointe doit être un chemin (texte), un BLOB ou une image : un objet
4D.Fileest ignoré. BSPK_EMAIL_Validate_Addresses($texte)renvoie vrai si chaque adresse (séparées par,ou;) est valide. Un texte vide renvoie vrai.

