Date de publication: le mardi 5 mai 2009 à 21h27
Dernière modification: par Pascal BOYER le mardi 5 mai 2009 à 22h24
« Article précédent: eZ Publish : système de gestion des mails - page « Contact » I
» Article suivant: eZ Publish : créer une galerie d'images avec la librairie highSlide
Cet article présente par le détail la configuration du système d'envoi de mail de eZ Publish.
Prérequis
Voici l'environnement logiciel dans lequel est développé l'exemple détaillé par l'article:
- Plate-forme Linux/Debian,
-
Serveur Apache 2.2.11-2
Voici quelques valeurs supposées de trois directives du fichier de configuration apache2.conf du serveur Apache:- DocumentRoot : /usr/local/web/ (répertoire racine d'installation de eZ Publish)
- User : www-data
- Group : www-data
- PHP 5.2.9
- MySQL 5.0.77
- Serveur de mail Postfix 2.5.4-1
- eZ Publish 4.1.0
L'ensemble des commandes en lignes proposées sont lancées à partir du répertoire racine de eZ Publish.
Points abordés
- Configuration minimaliste de Postfix
- Test de Postfix
- Configuration du serveur SMTP sous eZ Publish
- Les templates d'envoi des mails
- Configurer l'adresse e-mail du destinataire
- Configurer l'adresse e-mail de l'expéditeur
- Redirection après envoi du formulaire
Installer le serveur de mail SMTP Postfix
Voici le seul package nécessaire au fonctionnement d'un serveur de mail Postfix
dpkg -l |grep postfix
ii postfix 2.5.4-1 High-performance mail transport agent
Lors de l'installation de ce package un premier écran de configuration est proposé:
Puis un second dans lequel il faut renseigner le nom de domaine lié à l'adresse IP du serveur sur lequel est installé Postfix:
Configuration de Postfix
:
Pour une configuration détaillée de Postfix, reportez-vous à cette série d'articles:
Postfix + Cyrus IMAP + SSL + LDAP
A présent, voici un fichier de configuration main.cf minimaliste du serveur de mail SMTP:
vi /etc/postfix/main.cf
1 # See /usr/share/postfix/main.cf.dist for a commented, more complete version
2
3
4 # Debian specific: Specifying a file name will cause the first
5 # line of that file to be used as the name. The Debian default
6 # is /etc/mailname.
7 #myorigin = /etc/mailname
8
9 smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
10 biff = no
11
12 # appending .domain is the MUA's job.
13 append_dot_mydomain = no
14
15 # Uncomment the next line to generate "delayed mail" warnings
16 #delay_warning_time = 4h
17
18 # TLS parameters
19 smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
20 smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
21 smtpd_use_tls=yes
22 smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
23 smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache
24
25 # See /usr/share/doc/postfix/TLS_README.gz in the postfix-doc package for
26 # information on enabling SSL in the smtp client.
27
28 myhostname = democratie <== Valeur renvoyée par la commande «hostname»
29 alias_maps = hash:/etc/aliases
30 alias_database = hash:/etc/aliases
31 myorigin = /etc/mailname
32 mydestination = luxpopuli.fr, democratie, localhost.localdomain, localhost
33 relayhost =
34 mynetworks = 88.191.68.68 127.0.0.0/8 <===== AJOUTER L'ADRESSE IP DE VOTRE SERVEUR (ICI 88.191.68.68) +++++
35 mailbox_command = procmail -a "$EXTENSION"
36 mailbox_size_limit = 0
37 recipient_delimiter = +
38 inet_interfaces = all
Tester le serveur de mail SMTP
:
Avant toute chose, et si vous êtes client de FREE et connecté à une Freebox, assurez-vous que le port 25, fermé par défaut, est bien ouvert.
Connectez-vous à votre compte (
http://subscribe.free.fr/login/
) puis suivez le guide:
Pour tester le bon fonctionnement du serveur SMTP, le plus simple consiste à envoyer, en tant que root, un mail en ligne de commande par le biais de la commande sendmail fournie lors de l'installation du package Postfix:
sendmail mon_ami@yahoo.fr
Salut mon Ami, Je t'envoie un mail de test Si tu le reçois, appelle moi. @+ . <------ Un point en début de ligne + Entrée pour envoyer le mail ~#
En cas d'échec, consultez les fichier de log de votre système ( /var/log/mail.log ou /var/log/mail.err).
Configuration du serveur SMTP dans eZ Publish
Dans la mesure où il est peu probable que vous utilisiez différents serveurs SMTP, le mieux reste sans doute de le configurer une bonne fois pour toutes pour l'ensemble des siteaccess. Pour cela, placez les lignes suivantes dans le fichier de surcharges générales settings/override/ site.ini.append.php:
[MailSettings] Transport=SMTP <== TYPE DE SERVEUR TransportServer=luxpopuli.fr <== NOM DE DOMAINE DU SERVEUR SMTP TransportUser= TransportPassword= AdminEmail=admin@gmail.com <== ADRESSE E-MAIL DE L'ADMINISTRATEUR DE eZ Publish EmailSender=
Pour que la configuration du serveur SMTP ne s'applique qu'à certains de vos siteaccess, il vous suffit d'ajouter les lignes ci-dessus non pas dans le fichier de surcharges générales mais au fichier de surcharge propre à chacun des siteaccess.
Le template d'envoi des mails
Le template utilisé par défaut pour envoyer des e-mails est design/base/override/templates/collectedinfomail/ feedback_form.tpl. Ce template est lié, par défaut, à la règle de surcharge suivante dans le fichier override.ini.append.php du siteaccess public:
[feedback_form_mail] Source=content/collectedinfomail/form.tpl MatchFile=collectedinfomail/feedback_form.tpl Subdir=templates Match[class_identifier]=feedback_form
La dernière ligne implique que le template de surcharge feedback_form.tpl ne sera utilisé que si l'identifiant de la classe d'objet du formulaire est feedback_form. Ce qui n'est pas le cas de la classe créée pour l'exemple de l'article eZ Publish : système de gestion des mails - page « Contact » I dont l'identifiant est page_contact. Il s'avère donc important d'adapter ainsi la règle de surcharge ci-dessus:
[feedback_form_mail] Source=content/collectedinfomail/form.tpl MatchFile=collectedinfomail/feedback_form.tpl Subdir=templates Match[class_identifier]=page_contact <=== IDENTIFIANT DE LA CLASSE «Page de contact»
Code du template feedback_form.tpl
Pour ne pas modifier le code du template feedback_form.tpl utilisé par défaut, copions le dans le design du siteaccess public:
Si le répertoire collectedinfomail n'existe pas dans design/plain_site/templates/ lancez la commande suivante:
cp -Rp design/base/override/templates/collectedinfomail/ design/plain_site/templates/
Si le répertoire collectedinfomail existe déjà dans design/plain_site/templates/ lancez la commande suivante:
cp -p design/base/override/templates/collectedinfomail/feedback_form.tpl design/plain_site/templates/collectedinfomail/
Il devient dès lors possible de modifier à notre guise le template design/plain_site/templates/collectedinfomail/ feedback_form.tpl sans toucher à celui utilisé par défaut.
:
L'ensemble des informations collectées par ce template constituent le corps du mail envoyé par le formulaire de la page de contact.
Voici le code par défaut de ce template:
1 {set-block scope=root variable=subject}{"Collected information from %1"|i18n("design/base",,array($collection.object.name|wash))}{/set-block} 2 3 {set-block scope=root variable=email_receiver}{$object.data_map.recipient.content}{/set-block} 4 5 {* Set this to redirect to another node 6 {set-block scope=root variable=redirect_to_node_id}2{/set-block} 7 *} 8 9 {"The following information was collected"|i18n("design/base")}: 10 11 {section name=Attribute loop=$collection.attributes} 12 {$Attribute:item.contentclass_attribute_name|wash}: 13 {$Attribute:item.data_text|wash} 14 {/section}
-
Ligne 1: indique au système de traduire la chaîne de caractères « Collected information from %1» dans la langue du site ou sélectionnée par l'utilisateur si le site est multinlingues.
Cette traduction, qui utilise la fonction i18n , est recherchée dans la section <name>design/base</name> (précédée de la balise <context>) dans le fichier de traduction share/translations/fre-FR/translation.ts.
Voici les lignes de ce fichier définissant la traduction:
12575 <message> 12576 <source>Collected information from %1</source> 12577 <translation>Informations collectées à partir de %1</translation> 12578 </message>
La variable subject définie en début de ligne prend pour valeur l'ensemble de la chaîne de caractères «Informations collectées à partir de %1».
Par ailleurs, le code array($collection.object.name|wash) remplace « 1%» par le nom de l'objet, à savoir le nom de l'objet instancié par la classe Page de contact.
Cette chaîne de caractères servira à constituer le champ Objet du mail envoyé.
-
Ligne 3: affecte à la variable email_receiver la valeur de l'attribut recipient de l'objet (l'objet instancié par la classe Page de contact).
Cette ligne permet donc de récupérer l'adresse e-mail du destinataire. Nous reviendrons bientôt sur les différentes façons de configurer cette adresse.
-
Ligne 6: affecte à la variable redirect_to_node_id la valeur de l'identifiant du noeud vers lequel on souhaite rediriger l'utilisateur une fois le formulaire envoyé.
Cette ligne est par défaut inutilisée puisque commentée.
- Ligne 9: Tarduit la chaîne de caractères « The following information was collected» par « Les informations suivantes ont été collectées:»
- Lignes 11 à 14: initialise une boucle (ligne 11) qui, pour chaque champ du formulaire, affiche le nom de ce dernier (ligne 12) puis le contenu saisi par l'utilisateur (ligne 13).
Il sera nécessaire d'ajouter quelque balises HTML au code de ce template afin d'améliorer la mise en page du corps du mail envoyé.
Personnalisation du champ Objet du mail envoyé
Voici un simple exemple de code permettant d'affecter à la variable subject la chaîne de caractères « Page Contact du site femoca.org»:
{set-block scope=root variable=subject}{"Page %1"|i18n(,,array($collection.object.name|wash))} du site {ezini('SiteSettings','SiteURL')}{/set-block}
Référez-vous à la documentation de l'opérateur ezini pour de plus amples informations sur sa syntaxe.
Adresse e-mail du destinataire: différents cas
Cas N°1
La ligne 3 est commentée ou n'existe pas ou le champ Adresse mail du destinataire du formulaire est vide.
La seule façon de faire alors parvenir le mail consiste à configurer ainsi l'adresse du destinataire dans l'un des fichiers de surcharge site.ini.append.php:
[InformationCollectionSettings] EmailReceiver=nomdestinataire@free.fr
Cas N°2
La ligne 3 est décommentée, le champ Adresse mail du destinataire du formulaire contient une adresse valide et le paramètre EmailReceiver de la section [InformationCollectionSettings] des fichiers de surcharge site.ini.append.php est vide.
C'est alors bien sûr l'adresse du champ Adresse mail du destinataire qui est prise en compte.
Cas N°3
La ligne 3 est décommentée, le champ Adresse mail du destinataire contient une adresse valide et le paramètre EmailReceiver de la section [InformationCollectionSettings] des fichiers de surcharge site.ini.append.php contient également une adresse valide.
Là encore, c'est l'adresse du champ Adresse mail du destinataire qui est prise en compte.
Configurer l'adresse e-mail de l'expéditeur
Dans le contexte d'une page de contact, cette adresse est évidemment sans intérêt.
Il s'agit de l'adresse e-mail à laquelle il sera possible de répondre au mail envoyé (à ne pas confondre avec l'adresse e-mail du visiteur qui vient de remplir le formulaire). Elle dot être configurée sous la section [MailSettings] de l'un des fichiers de surcharge site.ini.append.php:
[MailSettings] Transport=SMTP TransportServer=linuxorable.fr TransportUser= TransportPassword= AdminEmail=admin@gmail.com <== CONFIGURÉ LORS DE L'INSTALL DE eZ Publish EmailSender=femoca@free.fr <== ADRESSE DE L'EXPEDITEUR
:
Si le paramètre EmailSender est vide, alors le système utilise la valeur du paramètre AdminEmail configuré lors de l'installation de eZ Publish.
Voici comment s'afficheront les mails dans notre boîte de réception:
La capture d'écran ci-dessus met en évidence le besoin d'ajouter quelques balises HTML au template feedback_form.tpl afin de rendre la lecture du corps du mail possible.
A propos de la redirection après envoi du formulaire
Comme je l'ai indiqué précédemment, il est possible de configurer la redirection de l'internaute, une fois l'envoi du formulaire réalisé, vers n'importe quellle page du site.
Pour cela il faut décommenter la ligne 6 et indiquer le numéro de ID de son choix:
5 {* Set this to redirect to another node *} 6 {set-block scope=root variable=redirect_to_node_id}25{/set-block} 7
L'internaute sera redirigé vers la page liée au noeud dont le ID vaut 25.
:
Lorsqu'une redirection est configurée par la ligne 6 alors le template récapitulatif form.tpl (voir
ce chapitre
) n'est plus utilisé.
En revanche, l'usage du template de validation/contrôle de la saisie collectedinfo_validation.tpl (voir
ce chapitre
) reste de rigueur.
Au niveau du kernel
Les données sont envoyées via le fichier kernel/content/ action.php appelé par cette ligne du formulaire (template pagecontact.tpl):
<input type="submit" class="defaultbutton" name="ActionCollectInformation" value="{"Send form"|i18n("design/ezwebin/full/feedback_form")}"
C'est ActionCollectInformation qui renvoie au fichier action.php.
A noter qu'il est possible de personnaliser le bouton Envoyer le formulaire en précisant un chemin vers une image:
<input type="image" class="defaultbutton" src="/design/plain_site/images/boutons/envoyerMail_4.png" name="ActionCollectInformation" />














