web-dev-qa-db-fra.com

Envoyer du HTML dans un courrier électronique via PHP?

Comment puis-je envoyer un email au format HTML avec des images en PHP? Je souhaite une page avec certains paramètres et une sortie HTML envoyée par courrier électronique à une adresse. Que devrais-je faire? Le principal problème est de joindre files.Comment puis-je le faire?

57
Abadis

C'est assez simple, laissez les images sur le serveur et envoyez-leur le PHP + CSS ...

$to = '[email protected]';

$subject = 'Website Change Reqest';

$headers = "From: " . strip_tags($_POST['req-email']) . "\r\n";
$headers .= "Reply-To: ". strip_tags($_POST['req-email']) . "\r\n";
$headers .= "CC: [email protected]\r\n";
$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

$message = '<p><strong>This is strong text</strong> while this is not.</p>';


mail($to, $subject, $message, $headers);

C’est cette ligne qui indique à l’éditeur et au destinataire que le courrier électronique contient (espérons-le) du code HTML bien formé qu’il devra interpréter:

$headers .= "Content-Type: text/html; charset=UTF-8\r\n";

Voici le lien que j'ai eu l'info .. ( lien ... )

Vous aurez besoin de sécurité cependant ...

118
Chris

Vous devez coder votre code HTML en utilisant un chemin absolu pour les images. Par chemin absolu signifie que vous devez télécharger les images sur un serveur et que dans l'attribut src des images, vous devez donner le chemin direct comme ceci <img src="http://yourdomain.com/images/example.jpg">.

Ci-dessous, le code PHP pour votre référence: - Son extrait de http://www.php.net/manual/fr/function.mail.php

<?php
// multiple recipients
$to  = '[email protected]' . ', '; // note the comma
$to .= '[email protected]';

// subject
$subject = 'Birthday Reminders for August';

// message
$message = '
  <p>Here are the birthdays upcoming in August!</p>
';

// To send HTML mail, the Content-type header must be set
$headers  = 'MIME-Version: 1.0' . "\r\n";
$headers .= 'Content-type: text/html; charset=UTF-8' . "\r\n";

// Additional headers
$headers .= 'To: Mary <[email protected]>, Kelly <[email protected]>' . "\r\n";
$headers .= 'From: Birthday Reminder <[email protected]>' . "\r\n";


// Mail it
mail($to, $subject, $message, $headers);
?>
17
Subhajit

J'ai ce code et il fonctionnera parfaitement pour mon site

  public function forgotpassword($pass,$name,$to)
    {
        $body ="<table  width=100% border=0><tr><td>";
        $body .= "<img width=200 src='";
        $body .= $this->imageUrl();
        $body .="'></img></td><td style=position:absolute;left:350;top:60;><h2><font color = #346699>PMS Pvt Ltd.</font><h2></td></tr>";
        $body .='<tr><td colspan=2><br/><br/><br/><strong>Dear '.$name.',</strong></td></tr>';
        $body .= '<tr><td colspan=2><br/><font size=3>As per Your request we send Your Password.</font><br/><br/>Password is : <b>'.$pass.'</b></td></tr>';
        $body .= '<tr><td colspan=2><br/>If you have any questions, please feel free to contact us at:<br/><a href="mailto:[email protected]" target="_blank">[email protected]</a></td></tr>';
        $body .= '<tr><td colspan=2><br/><br/>Best regards,<br>The PMS Team.</td></tr></table>';
        $subject = "Forgot Password";
        $this->sendmail($body,$to,$subject);
    }

fonction mail

   function sendmail($body,$to,$subject)
        {
            //require_once 'init.php';


            $from='[email protected]';      
            $headersfrom='';
            $headersfrom .= 'MIME-Version: 1.0' . "\r\n";
            $headersfrom .= 'Content-type: text/html; charset=iso-8859-1' . "\r\n";
            $headersfrom .= 'From: '.$from.' '. "\r\n";
            mail($to,$subject,$body,$headersfrom);
        }

la fonction image url est utilisée pour si vous voulez changer l'image que vous avez changée en une seule fonction, j'ai plusieurs fonctions de messagerie comme mot de passe oublié créer un utilisateur car je suis une fonction image url que vous pouvez directement définir le chemin.

function imageUrl()
    {
        return "http://".$_SERVER['SERVER_NAME'].substr($_SERVER['SCRIPT_NAME'], 0, strrpos($_SERVER['SCRIPT_NAME'], "/")+1)."images/capacity.jpg";
    }
9
Jalpesh Patel

Envoyer un email html n'est pas très différent de l'envoi d'emails normaux en utilisant php. Ce qu'il faut ajouter, c'est le type de contenu le long du paramètre d'en-tête de la fonction php mail (). Voici un exemple.

<?php
    $to = "[email protected]";
    $subject = "HTML email";
    $message = "
    <html>
    <head>
    <title>HTML email</title>
    </head>
    <body>
    <p>A table as email</p>
    <table>
    <tr>
    <th>Firstname</th>
    <th>Lastname</th>
    </tr>
    <tr>
    <td>Fname</td>
    <td>Sname</td>
    </tr>
    </table>
    </body>
    </html>
    ";
    // Always set content-type when sending HTML email
    $headers = "MIME-Version: 1.0" . "\r\n";
    $headers .= "Content-type:text/html;charset=UTF-8" . "\r\b";
    $headers .= 'From: name' . "\r\n";
    mail($to,$subject,$message,$headers);
?>

Vous pouvez également vérifier ici pour des explications plus détaillées par w3schools

5
Joseph

Vous pouvez facilement envoyer un email avec du contenu HTML via PHP. Utilisez le script suivant.

<?php
$to = '[email protected]';
$subject = "Send HTML Email Using PHP";

$htmlContent = '
<html>
<body>
    <h1>Send HTML Email Using PHP</h1>
    <p>This is a HTMl email using PHP by CodexWorld</p>
</body>
</html>';

// Set content-type header for sending HTML email
$headers = "MIME-Version: 1.0" . "\r\n";
$headers .= "Content-type:text/html;charset=UTF-8" . "\r\n";

// Additional headers
$headers .= 'From: CodexWorld<[email protected]>' . "\r\n";
$headers .= 'Cc: [email protected]' . "\r\n";
$headers .= 'Bcc: [email protected]' . "\r\n";

// Send email
if(mail($to,$subject,$htmlContent,$headers)):
    $successMsg = 'Email has sent successfully.';
else:
    $errorMsg = 'Email sending fail.';
endif;
?>

Le code source et la démonstration en direct peuvent être trouvés ici - Envoyer un magnifique email HTML en utilisant PHP

3
JoyGuru

Le moyen le plus simple est probablement d'utiliser simplement Zend Framework ou l'un des autres frameworks tels que CakePHP ou Symphony.

Vous pouvez le faire avec la fonction standard mail également, mais vous aurez besoin d’un peu plus de connaissances pour joindre des images.

Vous pouvez également héberger les images sur un serveur au lieu de les attacher. L'envoi de courrier HTML est documenté dans la documentation de la fonction mail.

2
Martijn

Utilisez PHPMailer,

Pour envoyer un courrier HTML, vous devez définir $ mail-> isHTML () uniquement, et vous pouvez définir votre corps avec des balises HTML

Voici un tutoriel bien écrit:

rohitashv.wordpress.com/2013/01/19/how-to-send-mail-using-php/

1
Rohitashv Singhal

L'astuce consiste à connaître l'ID de contenu de la partie mime Image lors de la construction de la partie corps HTML. Cela revient à faire le tag img

https://github.com/horde/horde/blob/master/kronolith/lib/Kronolith.php

Regardez la fonction buildMimeMessage pour un exemple de travail.

1
Ralf Lang