FAQ PHPConsultez toutes les FAQ

Nombre d'auteurs : 68, nombre de questions : 580, dernière mise à jour : 29 juillet 2013 

 
OuvrirSommaireMails

En utilisant la fonction mail(), il faut indiquer

 
Sélectionnez
Content-Type: text/html; charset="iso-8859-1"

comme quatrième argument de la fonction. Le quatrième argument sert à spécifier des headers supplémentaires.

Mis à jour le 6 août 2008  par Eric Berger

Lien : Comment envoyer un mail ?

Pour envoyer un mail en PHP, il nous faut utiliser la fonction mail() qui retourne TRUE si le mail a été accepté pour livraison, FALSE sinon.

Avant de pouvoir l'utiliser, nous devons vérifier les points suivants :
  • La fonction mail() est bien activée par l'hébergeur.
  • Pour le vérifier, il suffit de regarder son phpinfo() : Le serveur SMTP est correctement configuré.

Pour configurer le serveur SMTP, il faut ouvrir le fichier php.ini et rechercher la ligne :

Configuration actuelle
Sélectionnez
[mail function]

Puis mettre la configuration suivante :

Nouvelle configuration
Sélectionnez
; pour windows
smtp_port = 25 ;Valeur par défaut

; pour windows
SMTP = smtp.monfai.fr

; pour windows
sendmail_from = moi@monfai.fr ; Pas obligatoire

; pour unix.
;sendmail_path = /usr/sbin/sendmail ou /usr/lib/sendmail

PS : sendmail_path est utilisé pour localiser le programme d'envoi de mail par le serveur.

Attention : Si la directive sendmail_path est définie sous windows, alors smtp, smtp_port et sendmail_from seront ignorés et la commande spécifiée sera exécutée.

Une fois ces points réalisés, nous pouvons enfin passer à la construction du mail lui-même. Nous avons deux possibilités :

  1. L'envoi sous format texte
  2. L'envoi sous format HTML

Format texte

Mise en forme d'un mail sous format texte
Sélectionnez
<?php
$destinataire = 'adresse@fai.com';
// Pour les champs $expediteur / $copie / $destinataire, séparer par une virgule s'il y a plusieurs adresses
$expediteur = 'adresse@fai.com';
$copie = 'adresse@fai.com';
$copie_cachee = 'adresse@fai.com';
$objet = 'Test'; // Objet du message
$headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
$headers .= 'Reply-To: '.$expediteur."\n"; // Mail de reponse
$headers .= 'From: "Nom_de_expediteur"<'.$expediteur.'>'."\n"; // Expediteur
$headers .= 'Delivered-to: '.$destinataire."\n"; // Destinataire
$headers .= 'Cc: '.$copie."\n"; // Copie Cc
$headers .= 'Bcc: '.$copie_cachee."\n\n"; // Copie cachée Bcc        
$message = 'Un Bonjour de Developpez.com!';
if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
{
    echo 'Votre message a bien été envoyé ';
}
else // Non envoyé
{
    echo "Votre message n'a pas pu être envoyé";
}
?>

Format HTML

Mise en forme d'un mail sous format HTML
Sélectionnez
<?php
$destinataire = 'adresse@fai.com';
// Pour les champs $expediteur / $copie / $destinataire, séparer par une virgule s'il y a plusieurs adresses
$expediteur = 'adresse@fai.com';
$copie = 'adresse@fai.com';
$copie_cachee = 'adresse@fai.com';
$objet = 'Test'; // Objet du message
$headers  = 'MIME-Version: 1.0' . "\n"; // Version MIME
$headers .= 'Content-type: text/html; charset=ISO-8859-1'."\n"; // l'en-tete Content-type pour le format HTML
$headers .= 'Reply-To: '.$expediteur."\n"; // Mail de reponse
$headers .= 'From: "Nom_de_expediteur"<'.$expediteur.'>'."\n"; // Expediteur
$headers .= 'Delivered-to: '.$destinataire."\n"; // Destinataire
$headers .= 'Cc: '.$copie."\n"; // Copie Cc
$headers .= 'Bcc: '.$copie_cachee."\n\n"; // Copie cachée Bcc        
$message = '<div style="width: 100%; text-align: center; font-weight: bold">Un Bonjour de Developpez.com !</div>';
if (mail($destinataire, $objet, $message, $headers)) // Envoi du message
{
    echo 'Votre message a bien été envoyé ';
}
else // Non envoyé
{
    echo "Votre message n'a pas pu être envoyé";
}
?>

Important : Afin de séparer les headers du corps du message, nous devons obligatoirement rajouter la chaîne "\r\n\r\n" à la fin de sa définition afin d'éviter les injections de headers.

Attention : Il est important de noter que ce n'est pas parce que le mail a été accepté pour livraison qu'il arrivera à destination.

Mis à jour le 6 août 2008  par Forum PHP, Linaa, Kerod

Pour faire cela il suffit juste de rajouter une directive au header du mail qui est :

 
Sélectionnez
Disposition-Notification-To

Mais regardons ceci avec un petit exemple :

 
Sélectionnez
<?php
$destinataire = "son@adressemail.com"; // adresse mail du destinataire
$sujet = "Sujet"; // sujet du mail
$message = "Ton destinataire a bien lu ton mail"; // message qui dira que le destinataire a bien lu votre mail
// maintenant, on crée l'en-tête du mail
$header = "From: mon@adressemail.com\r\n"; 
$header .= "Disposition-Notification-To:mon@adressemail.com"; // c'est ici que l'on ajoute la directive
mail ($destinataire, $sujet, $message, $header); // on envois le mail
?>
Créé le 28 septembre 2006  par Julien Plu

Voici une fonction qui vous permettra de vérifier si une adresse mail est syntaxiquement correcte (c'est le rôle de l'expression régulière) et aussi si le domaine du mail existe (c'est le rôle de la fonction PHP getmxrr) :

 
Sélectionnez
<?php
function verifMail ($mail) 
{
	if (preg_match ('/^[a-zA-Z0-9_]+@[a-zA-Z0-9\-]+\.[a-zA-Z0-9\-\.]+$]/i', $mail ) ) {
		return false;
	}
	list ($nom, $domaine) = explode ('@', $mail);
	if (getmxrr ($domaine, $mxhosts))  {
		return true;
	} else {
		return false;
	} 
} 
?>

Une deuxième solution existe en utilisant depuis la version 5.2 de PHP ce que l'on appelle les filtres et pour notre problème le filtre qui nous intéresse est FILTER_VALIDATE_EMAIL :

 
Sélectionnez
function verifEmail ($email) {
    if (filter_var ($email, FILTER_VALIDATE_EMAIL) === false) {
        return false;
    } else {
        return true;
    }
}

Cependant, l'usage des filtres est critiqué par certains ; voir à ce sujet la documentation.

Mis à jour le 8 mars 2011  par Julien Plu

Lien : Tutoriel : initiation aux expressions régulières en PHP, par Guillaume Rossolini
Lien : Tutoriel sur la validation d'adresse e-mail en PHP, par Alexandre Tranchant

  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2003 Developpez.com Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.