Envoi de courriels en PHP

De FphAdmin.

Version du 21 janvier 2009 à 21:53 par Vic (discuter | contributions)
(diff) ← Version précédente | Voir la version courante (diff) | Version suivante → (diff)

[modifier] Les paramètres optionnels « obligatoires »

Le langage PHP fournit la fonction mail() qui permet d'envoyer des courriels. Sur le serveur Lamp, PHP s'appuie sur le logiciel Exim qui est le MTA (Message Transfer Agent) du serveur. Comme indiqué dans la documentation, la syntaxe est la suivante :

mail  ( string $to  , string $subject  , string $message  [, string $additional_headers  [, string $additional_parameters  ]] )

Les trois premiers arguments obligatoires parlent d'eux-même il s'agit du destinataire suivi du sujet puis le corps du message. Les deux derniers arguments sont optionnels. Cependant, il est important de se pencher sur les deux derniers car s'ils sont ignorés, cela a les trois conséquences suivantes :

  • L'expéditeur qui va apparaitre chez le destinataire est www-data <www-data@sd-13575.dedibox.fr>
  • Les caractères accentués risquent de mal passer surtout si le codage est de l'UTF-8
  • En cas d'erreur dans l'adresse du destinataire, le message d'erreur est perdu dans les limbes du serveur (plus précisément il se retrouve dans /var/spool/exim4/input)


Les deux premiers points vont être résolus grâce au premier argument optionnel $additional_headers. C'est une chaine de caractères qui contient tous les entêtes (séparés par un saut de ligne \r\n). Les plus importants sont :

  • Content-Type : pour indiquer le codage des caractères (exemple : Content-Type: text/plain; charset=UTF-8)
  • From : pour indiquer l'expéditeur du message
  • Reply-To: pour indiquer une adresse de réponse.

Voici un exemple

"Content-Type: text/plain; charset=UTF-8\r\nFrom: envoi-automatique@exemole.fr\r\nReply-To: duchmol@exemole.fr"


Le second argument optionnel $additional_parameters indiquent des paramètres qui sont directement transmis au MTA Exim par PHP. Il intervient pour récupérer les éventuels messages d'erreur. En effet, la modification de la valeur d'entête From ne change rien à l'affaire, c'est toujours www-data@sd-13575.dedibox.fr qui est considéré comme l'expéditeur et qui se retrouve dans la valeur d'entête Return-Path (c'est ce qui est appelé « l'enveloppe » du message). Pour changer cette « enveloppe », il faut passer le paramètre -f suivi de l'adresse à Exim (Exim a ici la même syntaxe que le logiciel Sendmail).

Dans l'exemple suivant, on force le retour d'erreur vers l'adresse duchmol@exemole.fr :

"-f duchmol@exemole.fr"

Précision : dans la configuration du logiciel Exim, l'utilisation du paramètre -f n'est autorisée qu'aux utilisateurs de confiance (trusted_user, autrement dit root). Cependant, dans la configuration actuelle le paramètre untrusted_set_sender est activé, ce qui permet l'utilisation du paramètre -f. Voir le manuel d'Exim.

Seconde précision : afin d'éviter le problème de la disparition des messages d'erreur, l'adresse de l'utilisateur www-data pointe vers vincent () mapeadores.net, cela n'empêche pas de configurer proprement ses envois.