Flux rss
Bookmark Ajouter aux favoris / Partager
PHP étant un langage consacré au Web, il possède bien évidemment des fonctions lui permettant de communiquer avec le "monde extérieur" à l'aide de fonctions standards. Le service le plus utilisé sur Internet étant la messagerie électronique, il est naturel que PHP permette d'envoyer des mails.

La fonction mail()

En PHP il existe une fonction très simple qui permet d'envoyer un email. Voilà sa syntaxe

Entier mail(chaîne email_destinataire,
	chaîne Sujet,
	chaîne corps_du_message,
	chaîne options);
Le dernier champ est facultatif, on en parlera juste après. Dans un premier temps nous allons envoyer un email de base. Voilà le nouveau code du fichier traitant les données envoyées par le formulaire précédant :
<html?>

<body?>

<h4>Merci <?echo $nom;??></h4?>

<?
  echo "<p>Votre commentaire : $texte</p?>";

  mail(
	"webmaster@commentcamarche.net",
	"Commentaire sur CCM",
	"$nom a laissé un commentaire à propos de commentcamarche.net:  \n\n$texte"
  );

?>

</body?>

</html?>
Les \n à l'intérieur du corps de m'email permettent d'aller à la ligne

Chez certains hébergeurs (dont Free) la fonction mail est désactivée car elle permet de simuler un envoi de mail à partir de n'importe quelle adresse. Ainsi elle est parfois remplacée par la fonction email()

Les options / en-têtes

Le champ options de la fonction mail permet d'ajouter une en-tête au message que l'on envoie. On peut par exemple y mettre la date, le logiciel utilisé pour envoyer l'email ou encore l'adresse de retour...
Voilà un exemple d'en-tête à utiliser lors d'un envoi de mail :

$from_email  = "contact@phpfrance.com";

$entetedate  = date("D, j M Y H:i:s -0600"); // Offset horaire
$entetemail  = "From: $from_email \n"; // Adresse expéditeur
$entetemail .= "Cc: \n";

$entetemail .= "Bcc: \n"; // Copies cachées
$entetemail .= "Reply-To: $from_email \n"; // Adresse de retour
$entetemail .= "X-Mailer: PHP/" . phpversion() . "\n" ;

$entetemail .= "Date: $entetedate";
La commande précédente équivaut donc à :
mail(
  "webmaster@commentcamarche.net",
  "Commentaire sur commentcamarche.net",
  "$nom a laissé un commentaire à propos de commentcamarche.net: \n\n$texte",
  $entetemail
);

La fonction email()

La fonction email() remplace parfois la fonction mail() chez certains hébergeurs (dont Free) car elle permet uniquement d'envoyer des mails à partir de votre adresse email.

Elle s'utilise à peu près de façon similaire à la fonction mail() mais sa syntaxe est quelque peu différente :

email(chaîne compte,chaîne destinataire,chaîne titre,chaîne message[,options]);

Voici un exemple d'utilisation du site à partir du compte webmaster pour le domaine commentcamarche.net :

email("webmaster",
"toto@wanadoux.fr",
"Bonjour Toto",
"Salut Toto\nvoici ton message");

Les fonctions IMAP

Le protocole IMAP (Internet Message Access Protocol) est un protocole (datant de 1986) permettant d'accèder à une messagerie électronique. Beaucoup plus évolué que le protocole POP (Post Office Protocol), il a toutefois été supplanté par ce dernier qui est plus simple.

Ainsi PHP implémente la version 4 de ce protocole et fourni des fonctions permettant de manipuler des boîtes aux lettres directement sur le serveur IMAP, ainsi que sur des serveurs POP ou NNTP (serveurs de news).

La première fonction à utiliser est la fonction imap_open(), elle permet de se connecter à la boîte au lettre et retourne un identifiant d'accès pour la boîte aux lettres, utilisable avec les autres fonctions IMAP. Sa syntaxe est la suivante :

Entier imap_open(chaîne boîte,
chaîne utilisateur,
chaîne mot_de_passe);
La boîte doit être spécifiée de la manière suivante (il s'agit ici de la boîte INBOX, celle dans laquelle les nouveaux messages arrivent) :
"{serveur:port}INBOX"
Le port utilisé par les serveurs IMAP est 143 par défaut.

Voici dans le cas de la newsletter de Comment ça Marche le script permettant d'ouvrir la boîte :

$mailbox = imap_open("{imap.pro.proxad.net:143}INBOX",
"newsletter@commentcamarche.net",
"password");

Une fois la boîte au lettre ouverte, il est possible (et généralement utile) de consulter les informations sur l'état de la boîte aux lettres grâce à la fonction imap_check() dont la syntaxe est comme suit :

Entier imap_check(chaîne Boîte);
Celle-ci retourne un objet dont il est possible de connaître les propriétés, c'est-à-dire toutes les informations sur la boîte au lettre passée en paramètre. Voici les propriétés de l'objet retourné par la fonction imap_check() :

Propriété Description
Date Date du dernier message
Driver Version du pilote utilisé
Mailbox Nom associé à la boîte aux lettres
Nmsgs Nombre de messages dans la boîte
Recent Nombre de messages non lus

La fonction certainement la plus utile est la fonction imap_header() car c'est elle qui permet de lire les messages contenus à l'aide de l'identifiant de la boîte et du numéro du message :

Objet imap_header(entier Boîte,
entier Message[,
entier Longueur_champ_from[,
entier Longueur_sujet]]);

Ainsi les propriétés de l'objet renvoyé par imap_header() sont les suivantes :

Propriété Description
Answered  
bcc  
bccadress  
cc  
ccaddress/td>  
Date  
date  
Deleted  
fetchfrom  
from  
in_reply_to  
MailDate  
message_id  
Msgno  
newsgroups  
Recent  
references  
remail  
return_pathaddress  
sender  
senderaddress  
Size  
subject  
Subject  
to  
toaddress  
update  
Unseen  

Les propriétés de l'objet retourné par la fonction imap_header() sont accessible par la notation suivante :

$Nom_de_l_objet->Propriétés;

La fonction imap_num_msg() permet de savoir très facilement le nombre de messages sur le serveur.

Entier imap_num_msg(entier boîte);

Ainsi, le script suivant permet d'afficher les mails contenus dans la boîte INBOX du compte newsletter@commentcamarche.net et supprime les mails dont le sujet contient "a détruire" ou les mails dont le corps contient "destruction" :

<?
$mailbox = imap_open("{imap.pro.proxad.net:143}INBOX",
"newsletter@commentcamarche.net",
"password");

$check = imap_check($mailbox);
$nMessages = imap_num_msg($mailbox);

echo "<table border=\"1\">";

for($index=1; $index <= $nMessages; $index++){
	$header = imap_header($mailbox, $index);

	echo "<tr><td>$header->Subject</td></tr>\n";

	$from = $header->from[0];

	echo "<tr><td>$from</td></tr>\n";

	$corps = imap_body($mailbox,$index);
	echo "<tr><td>$corps</td></tr>\n";

	if (eregi(".*a detruire.*",$header->Subject)||
	eregi("destruction",$corps)) {
		imap_delete($mailbox,$index,0);
	}
	echo "</table>\n";
}
imap_expunge($mailbox);
imap_close($mailbox);

?>


Dernière modification le mardi 14 octobre 2008 à 17:40:30.Ce document intitulé « PHP - Mail et fonctions réseau » issu de Comment Ça Marche (www.commentcamarche.net) est mis à disposition sous les termes de la licence Creative Commons. Vous pouvez copier, modifier des copies de cette page, dans les conditions fixées par la licence, tant que cette note apparaît clairement.
Hébergeur php gratuit + fonction mail bonsoir, j'aimerais avoir un hébergeur php gratuit + fonction mail activée. Merci N.B : pas free.fr SVP www.commentcamarche.net/forum/affich-3362743-hebergeur-php-gratuit-fonction-mail
[PHP] Fonction mail() La fonction mail() est bloquée chez certains des hébergeurs gratuits pour des raisons de sécurité (afin d'éviter le spam notamment), l'adresse ip de la machine qui a demandé le script sera alors indiquée dans le header 'X-MM-Mail-From-IP'. renseignez... www.commentcamarche.net/faq/sujet-117-php-fonction-mail
PHP - Les fonctions La notion de fonction On appelle fonction un sous-programme qui permet d'effectuer un ensemble d'instructions par simple appel de la fonction dans le corps du programme principal. Les fonctions permettent d'exécuter dans plusieurs parties du... www.commentcamarche.net/contents/php/phpfonc.php3
[Outlook/ThunderBird/Incredimail] Envoi/Réception de mailVous avez des problèmes d'envoi ou de réception de mail dans votre client de messagerie ? Cet article va vous aider à diagnostiquer le problème. 1. Introduction à la messagerie 2. Problèmes d'envoi de mail 3. Problèmes de réception de... www.commentcamarche.net/faq/sujet-5245-outlook-thunderbird-incredimail-envoi-reception-de-mail
[Langages] Envoyer un mail avec pièce jointeLes mails, tout comme les pages web, sont livrés avec des en-têtes (headers en anglais). Ces en-têtes servent à donner quelques détails nécessaires comme l'adresse du destinataire, celle de l'envoyeur, la date de l'envoi, le sujet du mail etc. Elles... www.commentcamarche.net/faq/sujet-2761-langages-envoyer-un-mail-avec-piece-jointe
Retour à la ligne formulaire PHP mail (Résolu)Bonjour, Je sais que c'est question a souvent été posée mais bon... Je veux retranscrire les retours à la ligne dans mon form php en envoi mail J'ai essayé streplace de \r\n en mais comme j'ai désactivé les htmlspecialchars, ça ne marche pas :... www.commentcamarche.net/forum/affich-4018101-retour-a-la-ligne-formulaire-php-mail
PHP - Probleme avec PHP mailBonjour, après plusieurs recherches et triturages d'esprit, j'appelle à l'aide.... une focntion d'envoi de mail depuis une page contact sur un site en ligne ne fonctionne pas. j'aimerias comprendre pourquoi et surtout connaitre la solution. ;) voici... www.commentcamarche.net/forum/affich-2036167-php-probleme-avec-php-mail
Formulaire simple sans php mail activéBonjour, voila j'ai trouvé sur le net un generateur de forulaire qui est pas mal fait , jai reussi a le faire fonctioné sauf que je ne recois jamais les mail qd je le test je me suis appercu que chez ifrance la fonction php mail n est pas activé ma... www.commentcamarche.net/forum/affich-5494971-formulaire-simple-sans-php-mail-active
Introduction à PHPQu'est-ce que PHP? PHP est un langage interprété (un langage de script) exécuté du côté serveur (comme les scripts CGI, ASP, ...) et non du côté client (un script écrit en Javascript ou une applet Java s'exécute sur votre ordinateur...). La... www.commentcamarche.net/contents/php/phpintro.php3
LAN (Local Area Network) - Réseau localLes LAN LAN signifie Local Area Network (en français Réseau Local). Il s'agit d'un ensemble d'ordinateurs appartenant à une même organisation et reliés entre eux dans une petite aire géographique par un réseau, souvent à l'aide d'une même... www.commentcamarche.net/contents/initiation/lan.php3
Fonctionnement du courrier électronique (MTA, MDA, MUA)Le courrier électronique, aussi simple soit-il à utiliser, repose sur un fonctionnement plus compliqué que celui du web. Pour la plupart des utilisateurs son fonctionnement est transparent, ce qui signifie qu'il n'est pas nécessaire de comprendre... www.commentcamarche.net/contents/courrier-electronique/fonctionnement-mta-mua.php3