Php:insérer de l'html dans le corps d'1 email

Salut tout le monde,

Ti pb comme d'habitude lol, mais vraiment petit celui-là :

Voilà, j'envoie une newsletter (jusque là c'est nickel), elle est bien expédiée, bien reçue avec le texte formaté comme il faut, mais voilà j'aimerai savoir si on peut insérer du code html dedans afin d'y mettre des images ou autre.

Si c'est possible, y-a-t-il un code spécial à mettre ? et où ?

Merci d'avance ;o)

11 réponses

  1. Modérateur
    Hello.

    Voir la RFC correspondante: http://ietf.org/rfc/rfc0822.txt

    Tu as la possibilité de fournir (dans un même mail) 2 version du même message (l'un en texte seul et l'autre en HTML).

    Je te retrouverai des exemples plus tard.
    1. oki merci à toi je vais voir ca. je cherchais justement à la base un tutorial mais je ne trouvais pas... ;o)
  2. Modérateur
    Sans rentrer trop dans les détails, voilà en gros comment ça se passe:

    L'entête du mail contient:
    MIME-Version: 1.0
    Content-Type: multipart/alternative;boundary="----=_NextPart_000_001E_01C2925D.97B328B0"


    (Le boundary étant une chaîne aléatoire de ton choix, mais qu'on ne doit pas retrouver dans le corps du message.)

    Ensuite la partie texte sera:
    ------=_NextPart_000_001E_01C2925D.97B328B0
    Content-Type: text/plain; charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable
    
    Bonjour, blablabla...


    (en adaptant bien sûr en fonction de ton charset et de l'encodage que tu utilises.)

    Puis la partie HTML:
    ------=_NextPart_000_001E_01C2925D.97B328B0
    Content-Type: text/html;charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable
    
    <html>Bonjour, blablabla...
    
    ------=_NextPart_000_001E_01C2925D.97B328B0--


    Le "boundary" sert à séparer les différentes parties.
    (Le boundary est également utilisé pour les attachements)
    1. c bon l'email est bien mis en forme, mais crois-tu que je puisses insérer des images dans une "textarea" ?
    2. Modérateur
      @pingunetteIl me semble qu'il faut que les images soient mis en attachement dans le mail.
    3. @sebsauvageok. bon bah alors c'est pas ce que je veux... :o(. Merci quand même
  3. g oublié de préciser que le corps du message était stocké dans une variable lors de la validation du formulaire. je suis un peu paumée là avec tout ce code lol.

    je vais essayer de ré-éxaminer tout ça ;o)
    1. Bonjour,

      J'ai utilisé un script d'envoi de mail en 2 versions (HTML et texte brut). Ca passe très bien sur mon client de messagerie (Outlook) mais pas du tout dans les webmails ! J'ai "This is a multi-part message in MIME format.", etc. Quelqu'un sait d'où peut provenir ce genre d'erreur ?

      Je vous envoie la fonction que j'ai utilisée :

      function mail_html($destinataire, $sujet , $messtxt, $messhtml , $from) { 
      		$limite = "_parties_".md5 (uniqid (rand()));
      
      		$entete = "Reply-to: $from\n";
      		$entete .= "From:$from\n";
      		$entete .= "Date: ".date("l j F Y, G:i")."\n";
      		$entete .= "MIME-Version: 1.0\n";
      		$entete .= "Content-Type: multipart/alternative;\n";
      		$entete .= "\tboundary=\"----=$limite\"\n\n";
      
      		//Le message en texte simple pour les navigateurs qui
      		//n'acceptent pas le HTML
      		$texte_simple = "This is a multi-part message in MIME format.\n";
      		$texte_simple .= "Ceci est un message au format MIME.\n";
      		$texte_simple .= "------=$limite\n";
      		$texte_simple .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
      		$texte_simple .= "Content-Transfer-Encoding: 7bit\n\n";
      		$texte_simple .= $messtxt;
      		$texte_simple .= "\n\n"; 
      
      		//le message en html original
      		$texte_html = "------=$limite\n";
      		$texte_html .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
      		$texte_html .= "Content-Transfer-Encoding: 7bit\n\n";
      		$texte_html .= $messhtml;
      		$texte_html .= "\n\n\n------=$limite\n";
      
      		return mail($destinataire, $sujet, $texte_simple.$texte_html, $entete);
      	}


      Merci !
  4. Bonjour à tous !

    Je débute en Html, Php et cie.
    J'aurais besoin d'un éclairement concernant le sujet ci-dessus.

    [quote]MIME-Version: 1.0
    Content-Type: multipart/alternative;boundary="----=_NextPart_000_001E_01C2925D.97B328B0"

    (Le boundary étant une chaîne aléatoire de ton choix, mais qu'on ne doit pas retrouver dans le corps du message.)

    Ensuite la partie texte sera:

    ------=_NextPart_000_001E_01C2925D.97B328B0
    Content-Type: text/plain; charset="iso-8859-1"
    Content-Transfer-Encoding: quoted-printable

    Bonjour, blablabla...

    (en adaptant bien sûr en fonction de ton charset et de l'encodage que tu utilises.) [/quote]

    1) Question:

    Ci-dessus le boundary est-il : ----=_NextPart_000_001E_01C2925D.97B328B0 ?
    Ou es-ce seulement une partie de ce code ?

    Si je remplace ----=_NextPart_000_001E_01C2925D.97B328B0 par newsletter00005 cela peut-il fonctionner ?
    (J'ai bien noté que l'ont ne dois pas retrouver newsletter00005 dans le corps du message).

    2) Question:

    Qu'es ce que le charset ?

    Je vais m'inscrire au forum, je vous remercit d'avance pour les informations, et les tutos présent sur ce site, très utile !
    1. Je suis maintenant identifié.

      Merci Seb pour ta réponse !

      Par contre j'arrive toujours pas à faire fonctionner le code ci-dessous:

      MIME-Version: 1.0
      Content-Type: multipart/alternative;boundary="----=_NextPart_000_001E_01C2925D.97B328B0" [...]


      Je me pose 2 questions:

      1) cela fonctionne t'il bien depuis un webmailer (gmail, yahoo) ?

      2) Ais-je bien integré le code ?

      Donc j'intègre le code ci-après dans le corps d'un e-mail envoyé depuis ma boite gmail:

      MIME-Version: 1.0
      Content-Type: multipart/alternative;boundary="lesdimanchesmatinstest001xxxx"

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

      Bonjour,
      Le collectif « Les dimanches matins » est composé de trois photographes, vidéastes et

      graphistes.

      Nous proposons deux prestations photographique et/ou vidéographique pour couvrir votre festival

      :
      1- réalisation d'un reportage photographique sur l'envers du décor (la préparation, les

      coulisses, les bénévoles, les techniciens, le lieu)
      2- prise de vue des spectacles. (les scènes, les groupes, le public)

      Notre book photographique est disponible sur:
      https://getniche.com/for-sale/skwat/

      Nous restons à votre disposition pour une éventuelle collaboration.
      Cordialement,

      les dimanches matins
      alimentation graphique générale

      04 77 41 93 03

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

      <HTML>
      <HEAD><A HREF="https://getniche.com/for-sale/skwat/"><IMG

      SRC="http://www.skwat.com/up/images/1194266235-FLY-ELVIS-BICHE.jpg"></A>
      </HEAD>

      <BODY>
      <P ALIGN="left">
      Bonjour,<BR>
      <BR>
      Le collectif « Les dimanches matins » est composé de trois photographes, vidéastes et

      graphistes.<BR>
      <BR>
      Nous proposons deux prestations photographique et/ou vidéographique pour couvrir votre festival

      :<BR>
      1- réalisation d'un reportage photographique sur l'envers du décor (la préparation, les

      coulisses, les bénévoles, les techniciens, le lieu)<BR>
      2- prise de vue des spectacles. (les scènes, les groupes, le public)<BR>

      Notre book photographique est disponible ici: <A

      HREF="https://getniche.com/for-sale/skwat/"><IMG SRC="http://a848.ac-

      images.myspacecdn.com/images01/50/m_bd3dec3513602bb9047ce117f25739bf.gif"></A><BR>
      <BR>
      Nous restons à votre disposition pour une éventuelle collaboration.<BR>
      Cordialement,<BR>
      <BR>
      les dimanches matins
      alimentation graphique générale<BR>
      04 77 41 93 03</P>
      </BODY>
      </HTML>
      lesdimanchesmatinstest001xxxx


      Qu'en pensez vous ?
      NB: le code Html n'est pas encore sous sa forme définitve.
      1. Modérateur
        Donc j'intègre le code ci-après dans le corps d'un e-mail envoyé depuis ma boite gmail:

        Raté: tu ne peux pas bidouiller les entêtes des email dans les webmails: ils sont sous contrôle de leur serveur (pour des raisons de sécurité).
        1. Okay !!

          Donc je pouvais continuer à me casser la tête !
          J'aurais donc du poser cette question en premier !

          Merci encore Seb, et bonne journée.
      2. un exemple

        <html>
        <body>
        <?php

        //----------------------------------
        // Construction de l'entête
        //----------------------------------
        $delimiteur = "-----=".md5(uniqid(rand()));

        $entete = "MIME-Version: 1.0\r\n";
        $entete .= "Content-Type: multipart/related; boundary=\"$delimiteur\"\r\n";
        $entete .= "\r\n";

        //--------------------------------------------------
        // Construction du message proprement dit
        //--------------------------------------------------

        $msg = "Je vous informe que ceci est un message au format MIME 1.0 multipart/mixed.\r\n";

        //---------------------------------
        // 1ère partie du message
        // Le code HTML
        //---------------------------------
        $msg .= "--$delimiteur\r\n";
        $msg .= "Content-Type: text/html; charset=\"iso-8859-1\"\r\n";
        $msg .= "Content-Transfer-Encoding:8bit\r\n";
        $msg .= "\r\n";
        $msg .= "<html><body><h1>Email HTML avec 2 images</h1>";
        $msg .= "Image 1:<img src=\"cid:image1\"><br />";
        $msg .= "<br /></body></html>\r\n";
        $msg .= "\r\n";

        //---------------------------------
        // 2nde partie du message
        // Le 1er fichier (inline)
        //---------------------------------
        $fichier = "/var/www/toto/images/logo.gif";
        $fp = fopen($fichier, "rb");
        $fichierattache = fread($fp, filesize($fichier));
        fclose($fp);
        $fichierattache = chunk_split(base64_encode($fichierattache));

        $msg .= "--$delimiteur\r\n";
        $msg .= "Content-Type: application/octet-stream; name=\"$fichier\"\r\n";
        $msg .= "Content-Transfer-Encoding: base64\r\n";
        $msg .= "Content-ID: <image1>\r\n";
        $msg .= "\r\n";
        $msg .= $fichierattache . "\r\n";
        $msg .= "\r\n\r\n";

        $msg .= "--$delimiteur\r\n";

        $destinataire = "exep@dom.com";
        $expediteur = "truc@gmail.com";
        $reponse = $expediteur;
        echo "Ce script envoie un mail au format HTML avec images à $destinataire";
        mail($destinataire,
        "Titre du message a changer",
        $msg,
        "Reply-to: $reponse\r\nFrom: $expediteur\r\n".$entete);
        ?>
        </body>
        </html>
        1. Je veux bien mais hotmail n affichera pas le Gif
          Comment faire ???
          Ca commence à me faire bonbon cette histoire de gif a la gomme !!!!!

          application/octet-stream ne suffit pas, image/jpeg ou image/gif convient
      3. Bonjour.
        voici mon script : il serts a envoyer un courriel a un ami avec les informations sur un emplois.

        Le script va tres bien, mais...Mon problème c'est qu'il envoie seulement un courriel en texte, pas moyen de joindre des images qui me permettrais de personnalisé le courriel graphiquement.

        Je suis un peu débutant, même si a force de vous lire on se perfectionne pas mal, je vous join le code de ma page PHP en espérant que quelqu'un peuve me dire comment transformer mon code pour reussir a envoyer mon texte agrémenté d'images .

        Patrick alias zakomtl

        //---------------------------
        //Voici mon code
        //-----------------------------

        <?
        require_once "../connect.php";
        include_once "../main.php";
        include_once "../configuration.inc.php";

        if(isset($ok) && $ok == 'Send my application')
        {
        $q1 = "select CompanyEmailRH from job_employer_info where ename = \"$_POST[ename]\"";
        $r1 = mysql_query($q1) or die(mysql_error());
        $a1 = mysql_fetch_array($r1);

        $url = "http://$myurl/employers/email-postulant.php?uname=$uname";

        $q2 = "select * from job_resume where uname = \"$uname\" ";
        $r2 = mysql_query($q2) or die(mysql_error());
        $a2 = mysql_fetch_array($r2);

        if(empty($a2[resume_title]))
        {
        echo "<br><br><br><center> You have not a resume yet. <br> Please, <a class=TN href=post-resume.php> build</a> one and then apply for the job.</center>";
        exit;
        }

        $qui = "insert into job_aplicants set job_id = \"$_POST[job_id]\", aplicant = \"$uname\"";
        $rui = mysql_query($qui) or die(mysql_error());

        $from = "From: $a2[0] <$a2[1]>";
        $subject = "New job applicant";
        $message = "A job seeker has applyed for your job offer. <br> To review the applicant`s resume, visit this address:\n $url\n\n You can access this information from Employers menu/Manage Jobs and then click on the link \"view applicants list\" for each job offer.";
        $message .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";

        mail($a1[0], $subject, $message, $from);

        echo "<br><br><br><center> Your aplication was sent to the employer.</center>";
        }
        elseif(isset($friend) && $friend == 'Send to a friend')
        {
        $url = "http://$myurl/jobseekers/jobseekers1.php?job_id=$_POST[job_id]";
        ?>
        <table width='100%' border='0' cellspacing='1' cellpadding='5'>
        <tr>
        <td height='16' bgcolor='#FFCC00'><center>
        <b><font color='#000000'>Send this Job to your friend.</font></b>
        </center></td>
        </tr>
        </table><br><br>
        <form action=send2.php method=post>
        <table align=center>
        <tr>
        <td><b> Friend's email: </b></td>
        <td><input type=text name=femail size=31></td>
        </tr>

        <tr>
        <td valign=top><b>Message: </b></td>
        <td><textarea rows=4 cols=26 name=fmessage>I found a great Job Offer at <?=$mydomain?>. Go to this URL to find out more. <?=$url?> </textarea></td>
        </tr>

        <tr>
        <td colspan=2 align=center>
        <input type=submit name=submit value=Send>
        </td>
        </tr>
        </table>
        </form>
        <?
        }
        ?>
        <? include_once('../footer.php'); ?>