11
votes

PHP Mail: Comment envoyer HTML?

Le code ci-dessous envoie un email correctement mais pour le corps. J'ai besoin d'afficher HTML dans le corps du message et je ne peux pas le faire. Les exemples de la bande n'enverront pas l'e-mail: (

Comment puis-je corriger mon code pour envoyer l'e-mail avec le HTML dans le corps? P>

Merci une tonne! P>

<?php

$to = 'mymail@mail.com';

$subject = 'I need to show html'; 

$from ='example@example.com'; 

$body = '<p style=color:red;>This text should be red</p>';

ini_set("sendmail_from", $from);

$headers = "From: " . $from . "\r\nReply-To: " . $from . "";
  $headers .= "Content-type: text/html\r\n"; 
if (mail($to, $subject, $body, $headers)) {

  echo("<p>Sent</p>");
 } else {
  echo("<p>Error...</p>");
 }

?>


1 commentaires

+1 pour la question que j'avais de la même question, mais ce fil répondit (de divers angles)


5 Réponses :


1
votes

J'ai trouvé que cela fonctionne bien!

source p>

<?php
//define the receiver of the email
$to = 'youraddress@example.com';
//define the subject of the email
$subject = 'Test HTML email'; 
//create a boundary string. It must be unique 
//so we use the MD5 algorithm to generate a random hash
$random_hash = md5(date('r', time())); 
//define the headers we want passed. Note that they are separated with \r\n
$headers = "From: webmaster@example.com\r\nReply-To: webmaster@example.com";
//add boundary string and mime type specification
$headers .= "\r\nContent-Type: multipart/alternative; boundary=\"PHP-alt-".$random_hash."\""; 
//define the body of the message.
ob_start(); //Turn on output buffering
?>
--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

Hello World!!! 
This is simple text email message. 

--PHP-alt-<?php echo $random_hash; ?>  
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit

<h2>Hello World!</h2>
<p>This is something with <b>HTML</b> formatting.</p> 

--PHP-alt-<?php echo $random_hash; ?>--
<?
//copy current buffer contents into $message variable and delete current output buffer
$message = ob_get_clean();
//send the email
$mail_sent = @mail( $to, $subject, $message, $headers );
//if the message is sent successfully print "Mail sent". Otherwise print "Mail failed" 
echo $mail_sent ? "Mail sent" : "Mail failed";
?>


2 commentaires

Je l'ai trouvé aussi mais ne pas envoyer dans mon cas, pourquoi?


Ceci s'appuie sur la commande mail. Cette commande est présente est la plupart des systèmes * Nix.



18
votes

Utilisez cet en-tête pour le courrier: xxx

et pour le contenu / corps: xxx

Il est important d'utiliser des commandes CSS en ligne et recommandé d'utiliser des tables pour l'interface.

...

dans votre corps de courrier que vous devez mettre code HTML avec la tête et le corps


5 commentaires

Merci Helle, mais erreur dans les en-têtes et pas de HTML dans le corps :(


Changez votre ligne aussi. et fermez toutes les étiquettes que vous avez ouvertes. et utilisez Tag. $ en-têtes. = "de:". $ de. "\ r \ nreply-to:". $ de. "";


Désolé, je ne comprends pas: $ Headers = "MIME-Version: 1.0 \ r \ n"; $ en-têtes. = "Type de contenu: Texte / HTML; Charset: UTF8 \ R \ N"; Envoie le courrier électronique avec le texte en lecture ce qui est génial. Mais dans le champ de Du terrain est affiché www data .. Comment puis-je résoudre ce problème? Une fois que cela est fait, ce sera fini. Merci beaucoup


@helle tu veux dire mieux d'utiliser des tables que des divs pour la mise en page?


@Sam dans le cas des mails: Oui.



-3
votes

réponse simple: ne le faites pas. Les courriels HTML sont diaboliques et ennuyeux. Au moins s'il n'y a pas de version appropriée en cas de plainte incluse. Appropriée = les mêmes informations telles que dans la version HTML, pas seulement un commentaire stupide sur l'obtention d'un autre client de messagerie ou d'un lien vers la version HTML si elle est disponible sur le Web.

Si vous en avez vraiment besoin: http://pear.php.net/package/mail_mime


1 commentaires

Ils peuvent être ennuyeux si être mal utilisé. Bien que, si utilisé soigneusement, ils sont assez bons. À mon avis, la meilleure pratique consiste à envoyer à la fois des corps unis / texte et uni / html, afin que l'utilisateur puisse choisir lequel il souhaite voir.



2
votes

Je recommande plutôt que de gâcher avec vous-même vous-même, vous utilisez l'une des nombreuses classes gratuites disponibles sur le Web pour le faire.

Je recommanderais: phpmailer


0 commentaires

4
votes

Avez-vous regardé les en-têtes du courrier entrant? Il dit xxx

ajoutez simplement un autre \ r \ n ici: xxx


0 commentaires