Quelque soit le moteur de votre site, vous pouvez envoyer des mails automatiquement avec la fonction mail() de PHP. Sur des hébergements mutualisés, souvent les prérequis à cela sont déjà faits, mais sur un serveur dédié, c’est à vous de vous en occuper. Voici un tutoriel très simple pour vous aider.
Avec de nombreux CMS ou moteurs de site tel que Wordpress par exemple, vous avez la possibilité d’envoyer ou de recevoir des mails directement depuis votre site. De manière automatisée ou non, dans tous les cas, c’est la fonction mail() de PHP qui est utilisée.
Une fonction mail() de PHP
A elle seule, cette fonction ne fait pas grand chose. Par défaut, elle va essayer de transmettre les arguments (destinataires, sujet, message …) qui lui sont transmis lors de son appel dans le code à un programme nommé sendmail. Encore faut-il que cette fonction soit activée dans votre configuration de PHP. Pour vérifier cela, il suffit de vérifier que la ligne n’est pas mise en commentaire dans le fichier php.ini.
Le fichier de configuration php.ini
Vous pourrez le trouver par exemple ici : /etc/php5/apache2/php.ini .
La partie qui nous intéresse est le bloc suivant :
[mail function]
; For Win32 only.
;SMTP = localhost
;smtp_port = 25
; For Win32 only.
;sendmail_from = [email protected]
; For Unix only. You may supply arguments as well (default: “sendmail -t -i”).
sendmail_path =/usr/sbin/sendmail -t -i
La dernière ligne est à décommenter, elle indique le chemin de sendmail. Si vous désirez utiliser un autre programme que sendmail, il est possible de le changer ici. Mais bien que nous allons utiliser Exim, nous ne toucherons pas davantage ce fichier car il existe un autre moyen d’envoyer la fonction mail vers le programme choisi.
Un agent de transfert de courrier, Exim
Appelé aussi MTA (Mail Transfert Agent), celui s’occupe comme beaucoup d’autres programmes comme sendmail, esmtp, postfix ou qmail par exemples, de gérer l’envoi et la réception de courriers sur votre serveur. J’ai choisi Exim car sa mise en place pour le lier simplement à la fonction mail est très simple. Ne désirant pas une usine à gaz du genre de Postfix et ne souhaitant pas réellement gérer des mails sur le serveur, Exim m’est apparu suffisant et simple.
Etant sur une distribution Ubuntu Server donc de type Debian, son installation se fait simplement par la ligne suivante :
apt-get install exim
Ceci va installer Exim, le programme en lui-même et Eximconfig le programme de configuration.
Une configuration simple d’Exim
Une fois le paquet installé, le processus de configuration est lancé automatiquement et consiste à vous posez une série de questions :
-
La 1ère question vous demande quel type de site et de serveur de mail vous mettez en place, répondre 1
-
La 2ème question vous demande le domaine d’expédition qui sera visible dans le mail, donc ce qui est après l’@. pour moi il s’agit donc de khayspace.info .
-
Pour la 3ème, 4ème et la 5ème questions, répondre none (concerne les autres noms de domaines, relais de domaines et de machines).
-
La 6ème question vous demande le nom d’un compte utilisateur pour recevoir les mails.
-
La 7ème question vous propose de réécrire le fichier /etc/aliases , répondez positivement.
-
La dernière question est la validation finale des réponses précédentes.
Si vous désirez modifier ces paramètres, vous pourrez le faire ultérieurement en appelant Eximconfig ou en modifiant le fichier /etc/exim/exim.conf puis en relançant Exim par la commande /etc/init.d/exim restart
Une liaison d’Exim avec la configuration PHP
Nous avions vu que nous pouvions indiquer dans le fichier de configuration php.ini le MTA utilisé, par défaut sendmail.
Au lieu de remplacer sendmail par exim, nous allons faire croire que la fonction mail() de PHP appelle sendmail mais rediriger cet appel vers exim. Cela se fait tout simplement par un lien symbolique entre sendmail et exim avec la commande :
ln -s /usr/sbin/exim /usr/sbin/sendmail
Voilà, la fonction mail() appellera directement Exim avec cette astuce. Tout est prêt techniquement du point de vue du serveur. Sauf peut-être à vérifier que les ports pour les mails sont bien ouverts. Rappelez-vous de Iptables dans ce billet.
Alors ? Vous avez trouver cela difficile à mettre en place ?