PHP Facile!
existe aussi en version
SQL et XML

6.Le langage PHP

6.22.Envoyer un mail

6.22.1.Introduction

Il existe de nombreuses bonnes raisons pour être amené à vouloir envoyer un N'email (:-)) via PHP: Email de confirmation d'inscription, Alerte webmaster lorsqu'un utilisateur propose un lien, ... D'où ce tutorial.
Malheureusement assez peu d'hébergeurs (gratuits) proposent cette fonctionalité et cela ce comprend aisement. En effet, il est si simple avec ce procédé d'envoyer des centaines d'emails à des adresses stockées en base de données que les hébergeurs sont soumis à 2 risques principaux: 1- Voir leurs resources systèmes diminuer fortement (au risque d'écrouler le serveur) 2- Etre accusé de faciliter le "spamming".

6.22.2.La fonction mail()

La fonction de base pour envoyer un courrier electronique est mail(). Dont la syntaxe est mail(<adresse du destinataire>,<titre du mail>,<corps du message>);
Ainsi pour envoyer un mail à testemail@toutestfacile.com (pensez à remplacer par votre propre adresse pour voir le résultat) dont le titre serait "test email 1" et le message "merci pour ton tutorial", cela donne le script suivant:
<?php
$destinataire = "testemail@toutestfacile.com";
echo "Ce script envoie un mail à $destinataire";
mail($destinataire, "test email 1", "merci pour ton tutorial");
?>
  • Pour une utilisation sous windows il convient de modifier le fichier php.ini [où?] . Celui-ci contient 2 champs dans la rubrique [mail functions]. L'un SMTP doit indiquer le compte smtp de votre fournisseur d'accès (qui est généralement de la forme mail.<domaine> ou smtp.<domaine>). L'autre sendmail_from doit indiquer votre adresse email.
  • Chez certains hébergeurs la fonction mail est remplacée par une fonction email (il s'agit d'une variante de mail destinée à limiter les possibles abus évoqués en introduction). Je vous invite alors à consulter votre hébergeur pour en connaître la syntaxe
  • Il est possible que votre fournisseur d'accès refuse l'envoi de votre email s'il n'arrive pas à vous identifier (et à vous autoriser l'envoi d'emails).

6.22.3.Entête de mail

Avec l'exemple précédent, le destinataire du message recevra bien le message mais avec un entête indiquant une adresse email de l'expéditeur et une adresse email pour la réponse déterminée par le serveur. Or le serveur est susceptible de déterminer que l'adresse email de l'expéditeur est webmaster@monsite.com alors que l'adresse email de l'expéditeur (et de réponse) doit être l'adresse d'un responsable d'une section du site (ex: moi@monsite.com). Heureusement, il est possible de spécifier cette information de la façon suivante:
<?php
$destinataire = "testemail@toutestfacile.com";
$expediteur   = "moi@monsite.com";
$reponse      = $expediteur;
echo "Ce script envoie un mail à $destinataire ".
     "en précisant que l'expediteur est $expediteur ".
     "et que la réponse doit être envoyée à $reponse";
mail($destinataire,
     "test email 1bis",
     "merci pour ton tutorial",
     "From: $expediteur\r\nReply-To: $reponse");
?>
Vous pouvez donc constater que la syntaxe complète de la fonction mail est mail(<adresse du destinataire>,<titre du mail>,<corps du message>,<entête>);
Il est évidemment possible d'indiquer des adresses différentes pour l'expéditeur (From) et la réponse (Reply-To)

6.22.4.Email au format HTML

Envoyer un email au format HTML est a peine plus compliqué, il suffit de le préciser dans l'entête du mail.
<?php
$destinataire = "testemail@toutestfacile.com";
$expediteur   = "moi@monsite.com";
$reponse      = $expediteur;

echo "Ce script envoie un mail au format HTML à $destinataire";
$codehtml=
"<html><body>" .
"<h1>Test Email</h1>".
"<b><u>Ceci est un document HTML</u></b><br>" .
"Avec differentes tailles de caractères et ".
    "<font color=\"red\">couleurs</font>" .
"</body></html>";
mail($destinataire,
     "Email au format HTML",
     $codehtml,
     "From: $expediteur\r\n".
        "Reply-To: $reponse\r\n".
        "Content-Type: text/html; charset=\"iso-8859-1\"\r\n");
?>
Si les images ne sont pas jointes au mail (voir plus loin) les chemins des liens et images doivent être absolus (c.a.d. commencer par http://).