Envoi de mail texte




  1. Envoi de Mail



  1. 1. Définition des champs

Pour envoyer des mails, il suffit d'utiliser la commande "mail" de PHP.
mail (<adresse_destination>, <Object>, <Message> [,<Header>]);
  • <adresse_destination> : adresse e-mail du destinataire du mail
  • <Object> : titre du mail
  • <Message> : contenu du mail
  • <Header> : header du mail, c'est à dire toute les "options" d'envoi du mail Le header est une chaîne de caractère contenant de nombreux champs :
    • From : Adresse de l'expéditeur (format : Nom <adresse_mail>)
    • X-Sender : Adresse réelle de l'expéditeur
    • X-Mailer : Logiciel utilisé pour l'envoi des mails
    • X-Priority : Priorité accordée au mail (valeur allant de 1 pour Urgent à 3 pour normal)
    • Return-Path : Adresse utilisée pour la réponse au mail
    • Content-Type : Contenu du mail (texte, html...)
    • cc : Carbon Copy, c'est à dire adresse en copie du mail, visible par tout le monde
    • bcc : Blind Carbon Copy, idem que "cc", mais invisible !



      1. 2. Exemple d'envoi d'un mail de base en PHP

    <?php
    $adresse = "nospam@mail.com";
    $object = "Test d'envoi de mail";
    $message = "Test afin de voir si l'envoi de mail fonctionne ou non !\n\n";
    mail ($adresse, $object, $message);
    ?>


      1. 3. Exemple d'envoi d'un mail plus complet en PHP

    <?php
    $adresse = "nospam@mail.com";
    $object = "Test d'envoi de mail";
    $message = "Test afin de voir si l'envoi de mail fonctionne ou non !\n\n";
    $headers = "From: Expediteur <nospam-sender@mail.com>\n";
    $headers .= "X-Sender: <nospam-sender@mail.com>\n";
    $headers .= "X-Mailer: PHP\n";
    $headers .= "X-Priority: 1\n";
    $headers .= "Return-Path: <nospam-sender@mail.com>\n";
    $headers .= "Content-Type: text/html; charset=iso-8859-1\n";
    $headers .= "cc:autre_adresse@mail.com\n";
    $headers .= "bcc:autre_adresse_cachee@mail.com\n";
    mail ($adresse, $object, $message,$headers);
    ?>


    Si vous voulez avoir plus d'informations sur les formulaires :
    Les formulaires en PHP et les formulaires HTML.




      2. Envoi de mail avec pièces jointes



      2. 1. Exemple

    L'envoi de mail se fait en 2 parties bien distinctes : le formulaire d'envoi de mail et le script d'envoi de mail.

    Le formulaire doit contenir un champs de type "File", et surtout doit être déclaré en encodage : "enctype="multipart/form-data"".
    Nous allons supposer que le nom du champs "File" est "attach".

    Si vous voulez avoir plus d'informations sur les formulaires :
    Les formulaires en PHP et les formulaires HTML.


    Voici le formulaire HTML :
    <form method=POST action="mail.php" enctype="multipart/form-data">
    Adresse : <br><input name="adresse" size=40 value=""><br>
    CC : <br><input name="cc" size=40 value=""><br>
    BCC : <br><input name="bcc" size=40 value=""><br>
    Sujet : <br><input name="subject" size=40 value=""><br>
    Message : <br>
    <Textarea name="msg" cols=40 rows=10 WRAP=HARD>
    </TextArea><br>
    Fichiers : <br>
    <input type=file size=40 name="attach"><br><br>
    <center><input type=submit value="Envoyer"></center>
    <input type=hidden name="message" value=1>
    </form>
    Voici le script PHP associé au traitement :
    <?php
      $headers = "From: Votre Nom <monnom@mondomaine.com>\n";
      $headers .= "X-Sender: <monnom@mondomaine.com>\n";
      $headers .= "X-Mailer: PHP\n";
      $headers .= "X-Priority: 3\n";
      $headers .= "Return-Path: <monnom@mondomaine.com>\n";
      $headers .= "cc:".$cc."\n";
      $headers .= "bcc:".$bcc."\n";
      if (is_uploaded_file($attach)) {
        $file = fopen($attach, "r");
        $contents = fread($file, $attach_size);
        $encoded_attach = chunk_split(base64_encode($contents));
        fclose($file);

        $headers .= "MIME-version: 1.0\n";
        $headers .= "Content-type: multipart/mixed; ";
        $headers .= "boundary=\"Message-Boundary\"\n";
        $headers .= "Content-transfer-encoding: 7BIT\n";

        $body_top = "--Message-Boundary\n";
        $body_top .= "Content-type: text/plain; charset=US-ASCII\n";
        $body_top .= "Content-transfer-encoding: 7BIT\n";
        $body_top .= "Content-description: Mail message body\n\n";

        $msg_cpl = $body_top.stripslashes($msg);

        $msg_cpl .= "\n\n--Message-Boundary\n";
        $msg_cpl .= "Content-type: $attach_type; name=\"$attach_name\"\n";
        $msg_cpl .= "Content-Transfer-Encoding: BASE64\n";
        $msg_cpl .= "Content-disposition: attachment; filename=\"$attach_name\"\n\n";
        $msg_cpl .= "$encoded_attach\n";
        $msg_cpl .= "--Message-Boundary--\n";
      }
      if (mail ("$adresse","".stripslashes($subject)."","$msg_cpl",$headers)) {
        echo ("<center><font color=green>Mail envoyé</font></center>");
      }
    ?>


      2. 2. Explications

    La partie sur les "headers" a déjà été traitée dans la première partie, je n'en reparlerais pas ici.
    la ligne "if (is_uploaded_file($attach))" permet de vérifier si le fichier à bien été envoyé en paramètre (d'autres tests peuvent être fait afin de vérifier si l'utilisateur à voulu envoyer un fichier ou non !).
    Les 4 lignes suivantes permettent de lire le contenu du fichier et de le mettre dans une variable "$encoded_attach" codée avec une base64. Ceci n'est pas forcement essentiel pour cette partie, donc, si vous ne comprenez pas à quoi cela correspond, j'en parlerais peut-être plus tard.

    Les 4 lignes suivantes ajoutent au header les informations concernant l'envoi de pièce attachées (à copier telles quelles !).
    La variable "$body_top" fixe le corps du mail, avec les variables reprises dans ce qui a été écrit dans le formulaire.
    Ensuite, on ajoute le fichier attaché dans le corps du mail.

    La dernière vérification permet de s'assurer que le mail a bien été envoyé.





    Page modifiée le : 22/07/2002
    Site modifié le : 14/09/2020


    Valid XHTML 1.0 Transitional

  •