29-11-2011 : Remettre dans le débat politique les principes du Conseil National de la Résistance
17-02-2012 : Pétition pour une protection de l’apiculture et des consommateurs face au lobby des OGM
Logo de mon site
Logo de mon site
Faire un don

Luxpopuli / eZ Publish / Trucs & astuces / eZ Publish : système de gestion des mails - page « Contact » II





Right menu

Logo du site ez.no  Logo XHTML 1.O du W3C  Logo XHTML 1.O du W3C  Site francophone officiel de Firefox
zero papier grâce aux catalogues et promos en ligne de bonial

eZ Publish : système de gestion des mails - page « Contact » II

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" />

Commentaires

  • @BEN

    Bonjour Ben,

    Les deux dernières lignes (paragraphe «Au niveau du kernel») sont en fait une seule et même ligne (proposées dans deux syntaxes différentes) du template pagecontact.tpl

    Cette ligne est absolument nécessaire (quelle que soit la syntaxe que tu choisiras) puisqu'elle définit le bouton sur lequel il faut cliquer pour envoyer le message.

    Cordialement,

    kernel

    Les deux dernieres lignes correspondant au Kernel ne sont pas obligatoires pour le bon fonctionnement de l'envoi de mail ?