L'envoi de courrier électronique s'effectue par l'intermédiaire de la fonction mail().
true | false = mail(destinataires, sujet, message[, entête][, paramètres])
Cette instruction permet d'envoyer des messages simples à un ou plusieurs destinataires.
$sujet = "Newsletter n°125"; $message = "Sommaire de la Newsletter..." . "\r\nContenu...\r\nMerci\r\n"; mail(abonne@dom.com, lecteur@free.fr, dev@lmb.ca, $sujet, $message); // Envoi d'une email simple à plusieurs destinataires.
Toutefois, il est nécessaire de configurer correctement le fichier php.ini pour utiliser cette fonction sous win32 ou sous UNIX.
[mail function] SMTP = localhost ; for win32 only sendmail_from = adresse@localhost.com ; for win32 only sendmail_path = ; for unix only, may supply arguments as well (default is sendmail -t)
Des courriers électroniques plus complexes peuvent être construits comportant non seulement une structure de message élaborée en HTML par exemple mais aussi un entête (headers) spécifique correspondant au contenu et devant suivre les spécifications MIME.
Un courrier électronique est décomposable en plusieurs parties dont la première constitue l'entête du message avec des champs indiquant les adresses du destinataire et de l'expéditeur, ainsi que le sujet du message entre autres et en une seconde partie correspondant au corps du message. Ce dernier peut également être divisé en plusieurs sous-parties renfermant un contenu mixte ou alternatif.
Exemple [voir]$entete = "From: expediteur@dom.com"; $entete .= "To: destinataire@dom.net"; mail($adresse, $sujet, $corps, $entete);
<!-- Fichier : formulaire.php --> <html> <head> <title>Formulaire</title> </head> <body> <form action="traitement.php" method="POST"> <table> <tr> <td>Nom</td> <td><input type="text" name="nom" size="20"></td> </tr> <tr> <td>Prénom</td> <td><input type="text" name="prenom" size="20"></td> </tr> <tr> <td><u>email :</u></td> <td> <input type="text" name="email" size="30"> </td> </tr> <tr> <td><u>Fichier :</u></td> <td> <input type="file" name="fichier"> </td> </tr> <tr> <td> <input type="reset" name="annulation" value="Annuler"> </td> <td> <input type="submit" name="soumission" value="Envoyer"> </td> </tr> </table> </form> </body> </html> <?php // Fichier : traitement.php function traiterErreur($champ){ echo("<h3>Le champ ".$champ." est vide ou incorrect !</h3>"); echo '<a href="javascript:history.go(-1)">Retournez à la page précédente</a>'; return false; } $valide = true; $exp_reg_email = "" . "^[a-z0-9]+((\.|-|_)[a-z0-9]+)*@[a-z0-9]+((\.|-|_)[a-z0-9]+)*(\.([a-z]){2,4})$"; if (isset($prenom) && ($prenom != "")) { $expediteur = $prenom; } else { $valide = traiterErreur('prenom'); } if(isset($nom) && ($nom != "")) { $expediteur = " " . $nom; } else { $valide = traiterErreur('nom'); } if(isset($email) && ($email != "") && ereg($exp_reg_email, $email)) { $expediteur .= " <" . $email . ">"; } else { $valide = traiterErreur('email'); } if($valide == true) { define("CRLF", "\r\n"); $destinataire = "Prénom Nom <webmaster@laltruiste.com>"; $reponse = "Réponse <messagerie@laltruiste.com>"; $sujet = "Envoi d'une image JPEG"; $fic = fopen($fichier, "r"); $piece_attachee = fread($fic, filesize($fichier)); $piece_attachee = chunk_split(base64_encode($piece_attachee)); fclose($fic); $boundary = "-----=".md5(uniqid (rand())); $entete = "To: " . $destinataire . CRLF; $entete .= "From: " . $expediteur . CRLF; $entete .= "Reply-To: " . $reponse . CRLF; $entete .= "Date: " . date("r") . CRLF; $entete = "MIME-Version: 1.0" . CRLF; $entete .= "Content-Type: multipart/mixed; boundary=". $boundary . CRLF . CRLF; $corps = "--$boundary" . CRLF; $corps .= "Content-Type: text/plain; charset=\"iso-8859-1\"" . CRLF; $corps .= "Content-Transfer-Encoding:8bit" . CRLF; $corps .= "Le fichier envoyé contient un fichier attaché..." . CRLF . CRLF; $corps .= "--$boundary" . CRLF; $corps .= "Content-Type: image/jpeg; name=". $fichier . CRLF; $corps .= "Content-Transfer-Encoding: base64" . CRLF; $corps .= "Content-Disposition: inline; filename=". $fichier . CRLF . CRLF; $corps .= $piece_attachee . CRLF . CRLF; $corps .= "--$boundary--" . CRLF; email($destinataire, $sujet, $corps, $entete); } ?> |