Envoyer un courriel avec PHP
Publié par cyruss il y a 5 mois
Le courrier électronique est devenu l'un des principaux moyens de communication dans les entreprises. Le courriel n'est pas une fin en soi mais constitue l'une des briques indispensables à l'amélioration du confort de l’utilisateur.
De l'utilité de gérer des e-mails
Si vous faites partie des personnes s'étant déja inscrit sur un forum ou ayant déjà fait un achat en ligne. Vous aurez donc sûrement recu par e-mail une confirmation de votre inscription ou de votre commande.
Voici quelques cas d'utilisation courants :
- envoyer une lettre d'information (newsletter) personnalisée
- tenir informés ses clients des mises à jour
- disposer d'un gestionnaire de courrier électronique permettant de consulter ses messages de n'importe où (webmail)
- faire vivre un forum, permettre d'avertir automatiquement une personne ayant posté un texte sur un forum qu''une réponse lui a été faite
- être tenu informé de comportements anormaux ou d'erreurs sur le site Web.
Mise en œuvre
Pré-requis techniques
Pour que la fonction d'envoi d'e-mail fonctionne correctement, vous devez avoir spécifié un serveur de messagerie dans le fichier php.ini. Il doit déjà exister une section semblable à celle-ci :
[mail function]
SMTP=mail.php.net ;for win32 only
sendmail_from= \n cyril@php.net ;for win32 only
;sendmail_path=;for unix only
Sous Microsoft Windows
Pour un serveur sous Microsoft Windows, SMTP doit indiquer l'adresse du serveur SMTP de votre fournisseur d'accès (généralement de la forme mail. ou smtp.).
Pour le même type de serveur, sendmail_from doit indiquer l'adresse e-mail qui sera utilisée par défaut comme adresse source de l'e-mail.
Si vous ne pouvez pas utiliser le SMTP de votre provider vous pouvez vous installer un serveur de mail en local. Vous pouvez installer la version freeware d'argosoft disponible à l'adresse suivante : http://www.argosoft.com
Il est très facile à paramétrer (voir dans l'aide) et il vous suffira d'indiquer "localhost" dans votre fichier php.ini.
Sous un système Unix
Sous un système de type Unix, il faut disposer d'un serveur de messagerie de type sendmail.
La localisation du programme de sendmail (habituellement /usr/sbin/sendmail ou /usr/lib/sendmail) est effectuée automatiquement. Le script de préconfiguration de PHP, configure, essaye de repérer la présence de sendmail, et affecte ce résultat par défaut lors de la compilation. En cas de problème de localisation, vous pouvez donner une nouvelle valeur à la directive de configuration sendmail_path dans le fichier php.ini.
Si votre système n'utilise pas sendmail, il fournit probablement un programme équivalent qui en émule l'interface. La ligne ci-dessous est celle que vous pourriez avoir pour un serveur qmail :
sendmail_path = "/var/qmail/bin/sendmail"
Envoyer des e-mails
La gestion des envois d'e-mail en PHP est extrêmement simple. On utilise la fonction mail() en lui passant en arguments :
- l'adresse électronique du destinataire,
- le sujet du courrier,
- le texte du courrier.
- <?php
- //On envoie un message à cyril@php.net
- ?>
Pour revenir à la ligne dans l'e-mail, vous pouvez utiliser, si votre texte est entre guillemets, le code du retour chariot, \n : il sera transformé par PHP en un caractère de fin de ligne. Si vous entourez le texte d'apostrophes, les caractères spéciaux ne seront pas remplacés et pourraient empêcher la compréhension de votre demande par le serveur de messagerie.
Envoyer un e-mail à plusieurs personnes
Pour envoyer un e-mail à plusieurs personnes, il faut séparer les adresses des destinataires par des virgules dans le premier paramètre.
- <?php
- $destinataires = ' cyril@php.net' , 'ab@anaska.com';
- //On sépare les destinataires par une virgule.
- $sujet = 'Titre du message';
- ?>
Changer l'expéditeur
Vous pouvez redéfinir l'en-tête correspondant pendant l'envoi de l'e-mail en ajoutant un quatrième argument à la fonction mail(). Cet argument optionnel comprend une chaîne de caractères qui sera ajoutée à la fin des en-têtes.Typiquement, cela permet d'insérer des en-têtes supplémentaires.
L'en-tête From définit l'expéditeur du message. Si vous ne la définissez pas, PHP le fait seul à partir de sendmail_from.
- <?php
- $destinataire = 'cyril@php.net', 'ab@anaska.com';
- $sujet = 'Vous n\'avez pas réglé vos cotisations';
- $entete = "From: responsable@urssaf.fr Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir ";
- ?>
Changer l'adresse de retour
Pour changer l'adresse de retour, il faut ajouter la directive suivante dans l'en-tête :
Reply-to: Adresse_e-mail \nOn ajoute cet en-tête à ceux déjà envoyés dans le quatrième argument de la fonction mail().
- <?php
- $destinataire = 'cyril@php.net', 'ab@anaska.com';
- $sujet = 'Vous n\'avez pas réglé vos cotisations';
- $entetes = "From: responsable@urssaf.fr Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir ";
- //On ajoute maintenant à la variable $entete la directive Reply-to
- $entetes .= "Reply-to: adresseretour@urssaf.fr Cet e-mail est protégé contre les robots collecteurs de mails, votre navigateur doit accepter le Javascript pour le voir ";
- ?>
Ajouter des personnes en copie
Les e-mails disposent de trois modes d'adressage : l'envoi à un destinataire défini, l'envoi d'une copie carbone (cc, Carbon Copy) et enfin l'envoi d'une copie carbone en mode caché (bcc, Blind Carbon Copy).
Dans son utilisation normale, la copie indique que la personne n'est pas le destinataire principal, mais qu'on souhaite le tenir informé. La copie carbone cachée permet de tenir une personne au courant sans que le destinataire principal en soit informé. Pour ajouter des destinataires de ce type, il faut ajouter une des directives suivantes dans l'en-tête :
Cc: Adresse_e-mail \n
Bcc: Adresse_e-mail \n
Comme les autres en-têtes, Cc: et Bcc: sont sensibles à la casse et la première lettre doit être en majuscule.
- <?php
- $destinataires = 'cyril@php.net, 'ab@anaska.com';
- $sujet = 'Vous n'avez pas réglé vos cotisations';
- $entetes = "From: responsable@urssaf.fr\n";
- $entetes .= "Reply-to: adresseretour@urssaf.fr";
- $entetes .= "Cc: secretaire@urssaf.fr \n";
- $entetes .= "Bcc: contentieux@urssaf.fr\n";
- /*Ici notre message sera envoyé en copie à secretaire@urssaf.fr
- et en copie cachée à contentieux@urssaf.fr
- */
- ?>
Envoyer des e-mails au format HTML
Nous avons vu ici comment envoyer des e-mails relativement simple. Si vous souhaitez y ajouter des éléments multimédia vous pouvez envoyer des e-mails au format HTML mais c'est l'objet d'un autre tutoriel disponible dans l'espace Progresser.