====== FAQ Questions Générales ======
===== PHP : Utilisation de la fonction mail() de PHP =====
NOTA : Cette fonction est disponible sur l'ensemble des hébergements à l'exception des hébergements gratuits.
//Auteur : Cédric Augustin\\
Site web : www.isoca.com\\
Date : 05/08/2001\\
Version : 1.0\\ //
Tout d'abord une lecture obligatoire, la documentation annotée de la fonction mail() sur www.php.net aux pages :
http://www.php.net/manual/fr/ref.mail.php \\
http://www.php.net/manual/fr/function.mail.php
=== Cas particulier d'NFrance : ===
Contrairement à beaucoup d'hébergeurs, NFrance donne accès à la fonction mail(). La conséquence c'est l'obligation de respecter la net-étiquette en ce qui concerne le spam.\\
Les dernières modifications de la configuration impose la présence d'un champ " from " valide, sinon l'email est rejeté.
=== Mailing liste ===
Comme c'est du php, il n'est pas possible de faire une mailling liste de grande taille car l'exécution d'une boucle sur plusieurs centaines d'adresses peut dépasser le timeout (durée max d'exécution d'un script). Chez NFrance le timeout est limité à 30 secondes.
=== Format des emails ===
Comme on peut construire de toute pièce son message et qu'un email n'est rien d'autre qu'un fichier texte, tous les formats sont possibles. Il faut donc construire son contenu selon le type de message. Il est possible d'envoyer des attachements ou des emails en html.
=== Limitation de la fonction mail ===
* Il n'est pas possible de configurer l'émetteur technique du mail. Chez NFrance c'est forcément le compte qui fait tourner le script.
Donc en cas d'erreur, si vous n'avez pas configurez un compte email par défaut, le mail se perd dans la nature.
* Une fois le message parti, il n'en reste rien.
* En cas d'erreur de distribution, la fonction mail() renvois quand même TRUE.
=== Syntaxe de base ===
mail (destinataire, sujet, message, entête supplémentaire);
=> __destinataire__ est une chaîne pouvant contenir plusieurs destinataires séparés par des virgules. Pour afficher le nom du destinataire à la réception au lieu de son email écrire :
Nom Prénom .
Les règles contre le spam limitent le nombre de destinataires à 20 en général.\\
Idem pour les copies (cc) et copie cachées (cci).
=> __sujet__ : le titre du mail. En principe il ne doit y avoir aucun caractère spécial ou accentué dans cette chaîne. Outlook s'en fiche, mais certain logiciels n'apprécient pas. Il faut donc encoder la chaîne pour remplacer tous les caractères à problème par des codes.
La fonction imap_8bit() devrait le faire normalement, mais elle ne code pas tout conformément à la RFC 2447 ( http://www.faqs.org/rfcs/rfc2047.html ). Pour obtenir un résultat qui fonctionne pour l'essentiel des cas vous pouvez utiliser la ligne de code suivante :
$sujet_code = '=?iso-8859-1?q?'.str_replace('%', '=', rawurlencode($sujet_brut)).'?=';
=> __message__ : c'est là dedans que vous mettez ce que vous voulez envoyer : le texte et les attachements. C'est à vous de construire le message pour qu'il respecte les règles. Les formats les plus fréquents sont texte et MIME (RFC2045 , RFC2046 , RFC2047 , RFC2048 et RFC2049, voir http://www.php.net/manual/fr/ref.imap.php ).
=> __Entête supplémentaire__ : c'est là que se trouvent les informations comme le type de message (texte, html, avec des attachements...), mais aussi les champs comme le from (obligatoire chez HD) ou d'enventuelles autres informations (adresse de retour, nom du programme...).
=== Exemple d'envois d'un message au format texte ===
Soit un formulaire qui renvois les champs suivants : //$sujet_brut, $from, $destinataire, $cc, $cci, $body//.
// préparation du destinataire (les espaces au début provoques des erreurs)
$destinataire=trim($destinataire);
// préparation du sujet
$sujet_code = '=?iso-8859-1?q?'.str_replace('%', '=', rawurlencode($sujet_brut)).'?=';
// préparation de l'entête
$mailheaders = "From: $from\r\n";
$mailheaders .= "Reply-To: $from\r\n";
if ($cc != ""){$mailheaders .= "Cc: $cc\r\n";};
if ($cci != ""){$mailheaders .= "Bcc: $cci\r\n";};
// corps du message
$msg_body = stripslashes($body);
// envois du message
mail($destinataire, $sujet_code, $msg_body, $mailheaders);
Exemple d'envois d'un message au format html
C'est exactement la même chose sauf qu'il faut rajouter la ligne suivante à l'entête :
$mail_headers .= "Content-Type: text/html; charset=iso-8859-1\r\n";
et ensuite que le corps du message soit codé comme une page html. On peut bien sûr utiliser des styles et tous les tag html. Par contre les images devront être quelque part sur internet. Il est possible de faire référence dans l'html à des images jointe en attachement, mais ce n'est pas une chose simple (je ne sais pas faire).
=== Envois d'attachement ===
Désolé je ne rentrerais pas dans le détail. C'est plus simple de jeter un coup d'œil aux commentaires sur http://www.php.net ou de regarder un exemple tous fait. Il y a plusieurs auteurs qui fournissent des fonctions toutes faites pour construire un message au format MIME. Sinon il y a ce que j'ai fait : http://www.isoca.com/creation/webmail/ qui fonctionne pas trop mal, mais pour un seul attachement.
=== Conclusion ===
Avec ces informations, vous pouvez envoyer des emails respectant les standards, lisibles par tous les clients de messagerie.
//Auteur : Cédric Augustin - Webmaster de [[http://www.isoca.com/|Isoca]] //