2011-02-04 19 views
10

El siguiente código está enviando un correo electrónico correctamente, pero para el cuerpo. Necesito mostrar html en el cuerpo del mensaje y no puedo hacerlo. Los ejemplos en la web no van a enviar el correo electrónico :(Php mail: cómo enviar html?

¿Cómo puedo arreglar mi código para enviar el correo electrónico con el código HTML en el cuerpo?

Gracias una tonelada!

<?php 

$to = '[email protected]'; 

$subject = 'I need to show html'; 

$from ='[email protected]'; 

$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>"); 
} 

?> 
+0

+1 para la pregunta que tenía similarmente pregunta, pero este Tema respuestas de ella (desde varios ángulos) – Sam

Respuesta

16

de utilizar esta conexión para el mai l:

$header = "MIME-Version: 1.0\r\n"; 
$header .= "Content-type: text/html; charset: utf8\r\n"; 

y para el contenido de/cuerpo:

<html> 
    <head> 
     <meta http-equiv="content-type" content="text/html; charset=utf-8" /> 
... ... ... 

es importante utilizar los comandos de CSS en línea y recommanded usar tablas para la interfaz.

...

en tu correo-cuerpo que se tiene que poner HTML code with head and body

+0

Gracias helle, pero error en los encabezados y no html en el cuerpo :( – lleoun

+0

cambie su línea a esto también y cierre todas las etiquetas que haya abierto y use la etiqueta '' '$ headers. =" Desde: ". $ from." \ r \ nReply-To: ". $ from." ";' – helle

+0

Lo siento, no lo estoy obteniendo: $ headers = "MIME-Version: 1.0 \ r \ n"; $ headers . = "Content-type: text/html; charset: utf8 \ r \ n"; envía el mensaje de correo electrónico con el texto para leer lo que es genial. Pero en el campo de, se muestra www-data ... ¿cómo puedo solucionarlo? ? Una vez hecho esto, habrá terminado. Muchas gracias – lleoun

1

I encontró esto funciona bien!

Source

<?php 
//define the receiver of the email 
$to = '[email protected]'; 
//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: [email protected]\r\nReply-To: [email protected]"; 
//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"; 
?> 
+0

pareció demasiado, pero no enviar en mi caso, ¿por qué? – lleoun

+0

¿La configuración del correo es correcta? ¿Estás en un servidor IIS? – chrisjlee

+0

Esto depende del comando de correo. Este comando está presente en la mayoría de los sistemas * NIX. –

-3

Respuesta simple: No lo haga. Los correos electrónicos HTML son malvados y molestos. Al menos si no hay una versión de texto claro APROPIADA incluida. Correcta = la misma información que en la versión HTML, no solo un comentario estúpido acerca de obtener otro cliente de correo electrónico o un enlace a la versión html si está disponible en la web.

Si realmente lo necesitan: http://pear.php.net/package/Mail_Mime

+3

Pueden ser molestos si se usan incorrectamente. Sin embargo, si se usan con cuidado, son bastante buenos. En mi opinión, la mejor práctica es enviar cuerpos simples/texto y plano/html, para que el usuario pueda elegir cuál quiere ver. – binaryLV

2

recomiendo en lugar de jugar un poco con hacer esto por sí mismo se utiliza una de las muchas clases gratuitas disponibles en toda la web para hacerlo.

recomendaría: PHPMailer

3

¿Has mirado en las cabeceras del correo entrante? Se dice

Reply-To: [email protected]: text/html

sólo tiene que añadir otra \r\n aquí:

Reply-To: " . $from . "\r\n";