SommaireTelecharger la documentationChapitre suivantChapitre precedent  

  .: News :.: Edito :.: Scripts :.: Forum :.: Erreurs :.: Lettre :. 
 
Raccourci :  
Mail


¤ Introduction
¤ Pré-requis
¤ Installation
¤ Configuration à l'exécution
¤ Types de ressources
¤ Constantes prédefinies
¤ ezmlm_hash
¤ mail

7.50.8 mail()

Envoie de mail

[ Exemples avec mail ]   PHP 3, PHP 4

bool  mail ( string   to , string   subject , string   message , string   additional_headers , string   additional_parameters )

mail poste automatiquement le message message à destination de to . Les destinataires multiples doivent être séparés par des virgules. Les emails avec pièces jointes ou contenus particuliers (comme les emails en HTML, par exemple), peuvent être réalisés avec cette fonction. Il faut respecter l'encodage MIME. Pour plus de détails, voyez http://www.zend.com/zend/spotlight/sendmimeemailpart1.php et les classes PEAR MIME .

Les RFC suivantes peuvent aussi se révéler utiles : RFC 1896 , RFC 2045 , RFC 2046 , RFC 2047 , RFC 2048 et RFC 2049 .

mail retourne TRUE si le mail est envoyé, et FALSE sinon.

Envoie de courrier électronique (mail)

<?php
mail
("maxou@exemple.com", "Mon Sujet", "Ligne 1\nLigne 2\nLigne 3");
?>

Le quatrième argument passé sera inséré à la fin de l'en-tête. Typiquement, cela permet d'insérer des en-têtes supplémentaires. Les en-têtes multiples doivent être séparées par des virgules.

Note

Sous Windows 32bits, vous devez utiliser \r\n pour séparer les en-têtes. Notez aussi que les en-têtes cc: et bcc: sont sensibles à la casse et doivent être écrits Cc: et Bcc: sous Win32.

Si le cinquième argument additional_parameters est fourni, PHP l'utilisera dans son appel du programme d'envoie de courrier électronique. Ceci est pratique pour passer une valeur correcte à l'en-tête Return-Path , avec sendmail.

Note

Le cinquième paramètre a été ajouté en PHP 4.0.5.

Envoi de eMail avec des en-têtes supplémentaires

<?php
mail
("personne@exemple.com", "Le sujet", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
    
."Reply-To: webmaster@{$_SERVER['SERVER_NAME']}\r\n"
    
."X-Mailer: PHP/" . phpversion());
?>
Avec le cinquième paramètre, vous pouvez ajouter d'autres paramètres de ligne de commande qui seront utilisés par le programme d'envoi de courrier. Dans l'exemple ci-dessous, l'en-tête Return-Path est correctement paramétré. Normalement, sendmail ajoute automatiquement l'en-tête X-Authentication-Warning (paramètre -f), car l'utilisateur "serveur web" n'est probablement pas un de ses utilisateurs de confiance ("trusted users"). Pour supprimer cette alerte, ajoutez l'utilisateur du serveur web dans la configuration de sendmail.
Envoi de eMail avec des en-têtes supplémentaires et un paramètre de ligne de commande supplémentaire

<?php

mail
("personne@exemple.com", "Le sujet", $message,
     
"From: webmaster@{$_SERVER['SERVER_NAME']}", "-fwebmaster@{$_SERVER['SERVER_NAME']}");
?>
Vous pouvez aussi utiliser des techniques simples de concaténations de chaînes pour construire des messages complexes :
Envoi de mail complexe avec mail

<?php
/* destinataire */
$to  = "Mary <mary@example.com>" . ", " ; // notez la virgule
$to .= "Kelly <kelly@example.com>";

/* sujet */
$subject = "Anniversaires à souhaiter en Août";

/* message */
$message = "
<html>
<head>
<title>Rappel des anniversaires d'Août</title>
</head>
<body>
<p>Voici la liste des anniversaires du mois d'Août!</p>
<table>
<tr>
  <th>Ami</th><th>Jour</th><th>Mois</th><th>Année</th>
</tr>
<tr>
  <td>Guillaume</td><td>3</td><td>Août</td><td>1970</td>
</tr>
<tr>
  <td>Sandra</td><td>17</td><td>Août</td><td>1973</td>
</tr>
</table>
</body>
</html>"
;

/* Pour envoyer du mail au format HTML, vous pouvez configurer le type Content-type. */
$headers  = "MIME-Version: 1.0\r\n";
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";

/* D'autres en-têtes : errors, From cc's, bcc's, etc */
$headers .= "From: Birthday Reminder <birthday@example.com>\r\n";

$headers .= "Cc: birthdayarchive@example.com\r\n";
$headers .= "Bcc: birthdaycheck@example.com\r\n";

/* et hop, à la poste */
mail($to, $subject, $message, $headers);
?>

Note

Assurez-vous qu'il n'y ait aucune nouvelle ligne (ou d'autres espaces ou caractères blancs) dans les paramètres to ou subject , car cela peut avoir des effets secondaires irrationnels.

Note

Le paramètre to ne peut pas être une adresse de la forme "Quelqu'un <quidam@exemple.com>". La commande mail ne comprendra pas ce format.

Voir aussi imap_mail .


Essayez aussi avec ces mots-clé : sendmail - mail - email - formulaire - envoyer

Fichiers connexes : imap_mail() - ref.mail.php - mail.configuration.php - indexes.functions.php - mail.requirements.php
 
 
 :: 
 
 :: 
 :: 
  :: 

 
didier.ciurana@numericable.fr
24/12/2003
Problème du point d'exclamation en 1024e position. Tout simplement, il est nécessaire de faire fréquement des retours à la ligne avec "n" lorsqu'on concatène un message avant son envoi. 1024 correspond à la limite d'un fichier text/html(?)
Anonyme
16/08/2003
J'ai eu de la peine, mais j'y suis arrivé !
J'ai réussi à envoyer des mail en format text et html !
mon problème venais d'un petit détail !
il faut mettre par exemple ceci dans les entetes :

Content-Type: multipart/alternative;
boundary="==_un_truc_unique_=="

Ne pas oublier des espace devant le boundary=.. !

Ensuite, il faut séparer le message en rajoutant 2 tiret (--) au début de la chaine boundary !
et finir le message en ajoutant 2 tirets (--) à la fin de la chaine boundary !
Voice un exemple de message multipart :

This is a multi-part message in MIME format.
--==_un_truc_unique_==
Content-Type: text/plain; charset="iso-8859-1"
Content-Transfer-Encoding: 8bit

Coucou

--==_un_truc_unique_==
Content-Type: text/html; charset="iso-8859-1"
Content-Transfer-Encoding: quoted-printable

<html>
.... message en html ...
</html>

--==_un_truc_unique_==--
support@webalaise.be
28/07/2003
Il y a une alternative pour free. Cela s'appelle prontomail. C'est un script qui ouvre un socket sur le port 25 et qui utilise l'imp de free. L'explication et la souce se trouve sur http://samuel.kabak.free.fr/
Cela marche assez bien. Il va de soit que ce script n'est PAS destiné au SPAM. Free s'en rendrait compte et bloquerait la fonction d'ouverture des socket en PHP.

Voilà, à bon entendeur.
yann.lequinio@point-com.fr
07/04/2003
Bj

J'envoie des mails en html sa marche impec sauf sous outlook ou j ai un "!" régulièrement tous les 1024 caractères c pourquoi donc ?
Anonyme
07/03/2003
Bon je vais compliquer la sauce.
Pour ma part je cherchait à envoyer une demande de Rendez-Vous à un destinataire dont je ne sais comment il les gères. bref pas plus d'info sur son calendar.
l'envoie se fait donc en VCALENDAR.
de plus je sais que certain de mes destinataire ont un mailer qui sais prendre les VCALENDAR dans les alternative Part bref il me faut donc envoyer un message avec à la fois une pièce jointe pour ceux qui ne reconnaissent pas les VCAL en alternative et en alternative pour les autres.

Je me suis fait un template.
que je remplis à la volée avant l'envoie du mail.

l'entête du mail va être :
$this->Head = "Content-Type: multipart/Mixed;n boundary="----_=_NextPart_".$this->Part.""ncontent-class: urn:content-classes:calendarmessage";

pour le contenu voici la structure.
<Text> sera remplacé par le texte brut du message
<Html> par la version formatée
<Content> Par le VCALENDAR
et <Next_Part> par le numéro de section : $this->Part
/***********************************/
This is a multi-part message in MIME format.

------_=_NextPart_<Next_Part>
Content-Type: multipart/alternative;
boundary="----_=_NextPart_<Next_Part>"

------_=_NextPart_<Next_Part>
Content-Type: text/plain;
charset="utf-8"
Content-Transfer-Encoding: 8bit

<Text>


------_=_NextPart_<Next_Part>
Content-Type: text/html;
charset="utf-8"
Content-Transfer-Encoding: 8bit

<!DOCTYPE HTML PUBLIC '-//W3C//DTD HTML 3.2//EN'>
<HTML>
<HEAD>
<META HTTP-EQUIV='Content-Type' CONTENT='text/html; charset=utf-8'>
<TITLE>[JI] TEST</TITLE>
</HEAD>
<BODY>
<!-- Converted from text/plain format -->
<pre>
<Html>
</pre>
<br>
<br>
<meeting.ics>
</BODY>
</HTML>

------_=_NextPart_<Next_Part>
content-class: urn:content-classes:calendarmessage
Content-Type: text/calendar;
name="meeting.ics";
charset="utf-8"
Content-Transfer-Encoding: 8bit

<Content>

------_=_NextPart_<Next_Part>--

------_=_NextPart_<Next_Part>
Content-ID: <000a01c2e48e$ada80cb7$_CDOEX>
Content-Description: meeting.ics
Content-Disposition: attachment;
filename="meeting.ics"
Content-Type: application/v-calendar;
name="Votre réservation";
charset="utf-8"
Content-Transfer-Encoding: 8bit

<Content>

------_=_NextPart_<Next_Part>--
/******************************************/
Notez bien que le message contient à la fois une pièce jointe et des partie alternatives.

A+JYT
premm@club-internet.fr
05/12/2002
La fonction mail étendue telle que décrite dans nexen fonctionne, et même bien...

sauf avec EasyPhp, en local, vous provoquerez une erreur si les champs Cc: et Bcc: sont indiqués. Mieux vaut les oublier dans cette configuration.

Je rappelle aussi que lors de l'install de EasyPhp, le serveur d'email n'est pas précisé, il faut l'ajouter dans php.ini (voir info plus haut).

kiana@alinto.com
28/04/2002
Bonjour @ tous
Pour ous aider y a aussi le site : http://www.phpfrance.com, dans tutorial cherchez mail et vous allez vite comprendre comment faire, C ce que G fais y a quelques mois.
je pense que l'adresse exacte est :
http://www.phpfrance.com/tutorial/id=17 si je ne me trompe pas! je ne me souviens plus très bien, ça fait un moment.
j'espère vous avoir aidé...
Kiana
hiegel_h@epita.fr
10/03/2002
concernant les mails html/plain, il faut savoir que le format par defaut , c'est plain text.
c'est anormal tu recoives une erreur lorsque tu enleves les headers html...
la solution la plus simple consiste a dire que tu envoies les mails en plain text, non ?

sinon, est ce que tu peux recuperer l'erreur au sein mm de la page php ? si oui, tu peux tenter un deuxieme post par mail en plain au lieu de html, et si ca reechoue, envoie-toi un mail avec tous les mesg d'erreur...
tu vois ce que je veux dire ?

(je suis conscient que ca risque de ne pas beaucoup t'aider..)
bon courage.
guybrush@lexpage.net
14/02/2002
Si vous souhaitez envoyer un mail en HTML, voici une fonction "home-made" :

function mail_html($from, $email, $sujet, $corps){
$entete = "MIME-Version: 1.0rn";
$entete .= "Content-type: text/html; charset=iso-8859-1rn";
$entete .= "From: $fromrn";
$result=mail($email, $sujet, $corps, $entete);
return $result;
}

on l'appelle donc comme ceci

mail_html("Guybrush <guybrush@lexpage.net>", "destinataire@mail.com", "Test", "<html><head></head><body><b><i><u>Bonjour</u></i></b></body></html>");

voila :-)


http://www.lexpage.net
gotubeb@free.fr
07/12/2001
Pour remplacer les "retour chariot" par des <br> voici une solution beaucoup plus simple :

$message=str_replace(chr(13).chr(10),"<br>",$message);

chr(13).chr(10) représente rn c'est a dire le retour chariot.
math_coz@yahoo.fr
27/11/2001
Rapport aux mails que j'ai reçu, voici mon source :


alors voila,

soit un formulaire qui m'envoit les parametres : message, from_email, destinataire (je prends l'exemple concret que j'utilise pour éviter d'avoir à retoucher le code pour l'exemple)

attention de bien remettre les lignes en entier (chaque ligne se termine par un ; ) si le mail les a découpé.


$corpsmail = "C'est un message de format MIME en plusieurs parties.nn";
$corpsmail .= "------=_identifiantquelconquenn";
$corpsmail .= "Content-Type: text/plain; n charset="iso-8859-1" n Content-Transfer-Encoding: 8bitnn";

// on remplace les protections de quotes par rien :
$corpsmail .= str_replace("\","",$message) ;

$corpsmail .= "nnnnnn==================================================";
$corpsmail .= "nnsignature automatique (footer)";

$corpsmail .= "nn------=_identifiantquelconquen";
$corpsmail .= "Content-Type: text/html; n charset="iso-8859-1" n Content-Transfer-Encoding: quoted-printablennn";
$corpsmail .= "<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">n<html>";
$corpsmail .= "<head><title>Trombinoo messenger !</title>";
// evidemment je doute de l'utilité de title, mais bon, tant qu'à faire...

$corpsmail .= "<style>";
$corpsmail .= "a:link { color: #000000; text-decoration: none}";
$corpsmail .= "a:visited { color: #000000; text-decoration: none}";
$corpsmail .= "a:hover { color: #000000; text-decoration: underline}";
$corpsmail .= "a { font-family: Verdana, Arial, Helvetica, sans-serif; font-size: 10px; font-weight: bold; color: #000000}";
$corpsmail .= "</style>";
$corpsmail .= "</head>";
$corpsmail .= "<body><font face="Verdana, Arial, sans serif" size="2">";

// bout de code pour récupérer les retours chariot... j'ai fait ça vite fait
// et il y a certainement plus joli ;-)
// en tout cas avec moins de 3 variables ça marche pas chez moi...
$corpsmailtrans = urlencode($message) ;
$corpsmailtrans2 = str_replace("%0D%0A","<br>",$corpsmailtrans);
$corpsmailtrans3 = str_replace("%5C%22",""",$corpsmailtrans2);
$corpsmail .= urldecode($corpsmailtrans3) ;

$corpsmail .= "<br><br>voila, on peut meme ajouter son propre footer en html !";
$corpsmail .= " </body></html>";

$corpsmail .= "nn------=_identifiantquelconque--n";

$entetedate = date("D, j M Y H:i:s +0200"); // avec offset horaire

$entetemail = "To: $destinataire n"; // Adresse expéditeur
$entetemail .= "From: $from_email n"; // Adresse expéditeur
$entetemail .= "Reply-To: $from_email n"; // Adresse de retour
$entetemail .= "Date: $entetedaten";
$entetemail .= "MIME-Version: 1.0 nContent-Type: multipart/alternative; n boundary="----=_identifiantquelconque"n";
// attention, bien mettre des espaces avant le boundary sinon ça deconne !
$entetemail .= "X-Mailer: le Trombino de Mathieu - PHP/" . phpversion() . "n" ;

$sujet = "message reçu depuis le trombinoscope !" ;
echo "Message pour $individumail de la part de $from_email envoy&eacute;<p>nn";
mail( $destinataire, $sujet, $corpsmail, $entetemail );



voila, c'est ma méthode, qui demande certainement à être améliorée, mais au moins ça marche ! ;-))

Mathieu


weber@netcourrier.com
01/08/2001
La fonction mail renvoie faux si elle n'a pas pu envoyer le mail. La fonction ne teste pas (à ma connaisssance)si l'email du destinataire est valide. C'est à toi de la tester(Au moins voir si l'email ressemble a quelque chose).

Amicalement,
weber.
marie_renoir@yahoo.fr
22/06/2001
Salut!

Pour ceux que ça intéresse voici un site avec un tutorial pour les mails avec fichiers attachés :
http://www.phpfrance.com/tutorials/index.php
Anonyme
20/05/2001
Apparament, certains programme d'envoi de mail sous Windows demandent l'utilisation de rn pour séparer les lignes d'entêtes, et non pas seulement n, comme sous Unix.

C'est comme ca que phorum a pu fonctionner sur mon site Windows.


Chapitre précédentChapitre suivantAccueil nexen.net