Fonction mail
Il vous est certainement déjà arrivé de vous inscrire sur un forum ou un réseau social, et juste après que vous ayez fini votre inscription, vous recevez un mail de bienvenue. Bien entendu ce mail n'a pas été envoyé par une personne mais par le serveur, et d'une manière automatisée.
En PHP il est possible d'envoyer un mail via un script, c'est grâce à la fonction
mail(). La syntaxe de la fonction mail ressemble à ceci:
mail($dest , $objet , $message , $entetes);
Paramètre $dest:
Le paramètre
$dest spécifie l'adresse du destinataire. Son format est standard et peut être représenté comme ceci:
- user@domaine.tld
- Nom Prénom <user@domaine.tld>
- user1@domaine1.tld1, user2@domaine2.tld2 ... (plusieurs destinataires à la fois)
- Nom1 Prénom1 <user1@domaine1.tld1>, Nom2 Prénom2 <user2@domaine2.tld2> ... (plusieurs destinataires à la fois)
Paramètre $objet:
Le paramètre
$objet décrit l'objet du message. Il peut être laissé vide.
Paramètre $message:
Le paramètre
$message désigne le message à envoyer au(x) destinataire(s). Il peut être en format texte ou HTML. Les mails en format HTML peuvent avoir un contenu formaté à l'aide de balises HTML, des images ou des arrière-plan. Ils auront l'air comme si leur code était exécuté par le navigateur.
Paramètre $entetes:
Le paramètre
$entetes est facultatif mais très utile. Il spécifie les informations supplémentaires qui seront envoyées avec le mail. Un entête respecte la forme
propriété:valeur. Si plusieurs entêtes sont combinés alors il faut les séparer par
n.
Voici la liste des entêtes les plus utilisés:
- From: désigne l'adresse de l'expéditeur.
- Cc: (pour Carbon Copy) désigne l'adresse qui recevra une copie du mail.
- Bcc: (pour Blind Carbon Copy) désigne l'adresse qui recevra une copie cachée du mail.
- Reply-To: spécifie l'adresse de réponse.
- Content-Type: spécifie l'encodage du mail. S'il n'est pas spécifié alors il s'agit d'un mail en format texte. Si on veut envoyer un mail en format HTML on peut alors spécifier l'encodage suivant: text/html; charset="iso-8859-1" ou text/html; charset="utf-8"...
Exemple:
<?php
$dest="contact@chiny.me";
$objet="Rendez-vous";
$message="
<font face='arial'>
Bonjourn
Prière de se retrouver sur Skype à <b>18h</b> aujourd'hui.n
Merci et bonne journée.
</font>
";
$entetes="From: sc@example.comn";
$entetes.="Cc: chiny@example.comn";
$entetes.="Content-Type: text/html; charset=iso-8859-1";
if(mail($dest,$objet,$message,$entetes))
echo "Mail envoyé avec succès.";
else
echo "Un problème est survenu.";
exit;
?>
Serveur SMTP
Si vous exécutez le code précédent sur le localhost vous aurez probablement quelque chose qui ressemble à ceci:
Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set().
Un problème est survenu.
Le message est explicite. En réalité, ce n'est pas votre serveur Web qui se charge d'envoyer le mail, mais un serveur SMTP qui peut être installé sur la même machine qui accueille le serveur Web ou sur une machine différente.
Si vous avez opté pour un hébergement mutualisé auprès d'un hébergeur, alors le problème ne se posera pas. En effet, votre serveur est préalablement configuré et vous pouvez ainsi envoyer des mails à l'aide PHP sans problème. Cependant, si vous disposez de votre propre serveur ou que vous voulez envoyer des mails depuis un script hébergé sur le "localhost", dans ce cas vous devez déclarer le serveur SMTP qui sert de relais. Vous avez donc le choix entre deux méthodes:
- Manipulation du fichier php.ini
- Utilisation de la fonction ini_set()
Manipulation du fichier php.ini:
Le fichier
php.ini contient des directives qui permettent de définir les paramètres SMTP comme ceci:
SMTP = localhost
smtp_port = 25
A la place de "localhost" vous pouvez déclarer l'adresse d'un serveur SMTP fonctionnel, qu'on appelle aussi
relais SMTP. Le port 25 est utilisé par défaut par ce protocole.
Fonction ini_set():
Si pour une raison quelconque vous ne pouvez (ou ne voulez) pas modifier le fichier
php.ini, la fonction
ini_set() est là pour vous servir.
La fonction
ini_set( $directive , $nouvelleValeur ) permet de changer temporairement la configuration PHP définie par
php.ini. Elle agit sur la directive $directive en lui attribuant la valeur $nouvelleValeur.
Exemple:
<?php
ini_set("SMTP","localhost");
ini_set("smtp_port","25");
?>
Cette configuration dure aussi le longtemps que le script est exécuté. A la fin de celui ci, la configuration par défaut (définie dans
php.ini) est rétablie.
La plupart des relais SMTP ne sont plus accessibles à tout le monde, en raison de leur utilisation abusives par les spammers, qui envoient des mails nuisibles au clients à travers eux.
Classe PHPMailer
PHPMailer est une classe qui renferme des méthodes qui permettent de construire, formater et envoyer des emails en PHP. Elle facilite remarquablement l'opéation d'envoie des emails vue qu'elle permet de regrouper tous les paramètres en un seul endroit, y compris les paramètres du serveur SMTP comme l'adresse, le port, le type de sécurité, le login et le mot de passe.
La classe PHPMailer facilite aussi la manipulation des pièces jointes.
Je vous renvoie sur le code source de la classe PHPMailer disponible gratuitement sur
GiHub https://github.com/PHPMailer/PHPMailer. Des exemples y sont également disponibles pour vous initier à l'utilisation de cette classe.