2012-01-09 28 views
5

Actualmente estoy usando un script que usa file_get_contents para obtener el contenido de un archivo php y luego lo envía dentro de un correo electrónico a una lista de clientes. Me gustaría modificar la secuencia de comandos para permitir la recuperación de texto sin formato para reducir el riesgo de que se marque como spam.Enviando boletines HTML con texto sin formato

Este es el guión que tengo en este momento:

function sendit($to,$subject,$body) 
{ 
$headers = "To: <{$to}>\n". 
        "From: Test Newsletter Admin <[email protected]>\n". 
        "Reply-To: Test Newsletter Admin <[email protected]>\n". 
        "MIME-Version: 1.0\n". 
        "Content-Type: text/html; charset=ISO-8859-1\n"; 

    $mail_sent = @mail($to, $subject, $body, $headers); 
    return $mail_sent; 
} 
$content = file_get_contents('attach/newsletter.php'); 
//require_once('../../func.php'); 
set_time_limit(0); 
date_default_timezone_set('Europe/London'); 

$log = fopen('send'.date('dmY',time()).'.log','wb'); 

//$array = file('NonCustClean.txt'); 
$array = file('devaddresses.txt'); 
// Delay In Seconds between emails (must be INT) 
$delay = 10; 
$count = count($array); 

$end = time()+ ($delay*$count); 

echo "Start Time: ".date('d/m/Y H:i:s',time()).'<br />'; 
echo "Estimated End Time: ".date('d/m/Y H:i:s',$end).'<br />'; 
echo "(".dateDiff(time(),$end).")<br />"; 

foreach ($array as $email) 
{ 

$status = (sendit(trim($email), 'Test Newsletter',$content))?'Sent':'failed'; 
fwrite($log,date('[d/m/Y H:i:s]',time()).' Email '.$status.' to '.trim($email)."\n"); 
echo date('[d/m/Y H:i:s]',time()).' Email '.$status.' to '.trim($email)."</br>"; 
flush(); 
    sleep(10); 
} 

newsletter.php solo contiene código básico de HTML/CSS.

¿Podría alguien aconsejarme cómo puedo alterar este guión para acompañar un respaldo de texto sin formato?

Gracias por cualquier ayuda.

+0

¿Ha pensado en utilizar una biblioteca como [SwiftMailer] (http://swiftmailer.org/)? Esta [respuesta] (http://stackoverflow.com/a/29345590/987864) describe lo fácil que es enviar HTML y correo de texto sin formato. – Daan

Respuesta

5

lo que estás buscando es conocido como un correo electrónico de varias partes. Su cuerpo contiene tanto HTML como texto, delimitado por un llamado "límite". El cliente de correo electrónico se determinará a sí mismo si mostrará la versión HTML o de texto del correo, en función de sus capacidades y preferencias de usuario.

Un ejemplo de cómo se puede definir el sitio (source):

$notice_text = "This is a multi-part message in MIME format."; 
$plain_text = "This is a plain text email.\r\nIt is very cool."; 
$html_text = "<html><body>This is an <b style='color:purple'>HTML</b>" . 
      "text email.\r\nIt is very cool.</body></html>"; 

$semi_rand = md5(time()); 
$mime_boundary = "==MULTIPART_BOUNDARY_$semi_rand"; 
$mime_boundary_header = chr(34) . $mime_boundary . chr(34); 

$to = "Me <[email protected]>"; 
$bcc = "You <[email protected]>, Them <[email protected]>"; 
$from = "Me.com <[email protected]>"; 
$subject = "My Email"; 

$body = "$notice_text 

--$mime_boundary 
Content-Type: text/plain; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

$plain_text 

--$mime_boundary 
Content-Type: text/html; charset=us-ascii 
Content-Transfer-Encoding: 7bit 

$html_text 

--$mime_boundary--"; 

if (@mail($to, $subject, $body, 
    "From: " . $from . "\n" . 
    "bcc: " . $bcc . "\n" . 
    "MIME-Version: 1.0\n" . 
    "Content-Type: multipart/alternative;\n" . 
    "  boundary=" . $mime_boundary_header)) 
    echo "Email sent successfully."; 
else 
    echo "Email NOT sent successfully!"; 
+0

Intenté esto y el correo electrónico terminó en la carpeta de correo no deseado. http://www.mail-tester.com/ dice 'El mensaje es 10% a 20% de ofuscación de HTML'. Además, dice que no puedo enviar correos desde la dirección de correo electrónico especificada. – erdomester

0

Debe modificar

Content-Type: text/html; charset=ISO-8859-1\n 

Para más informaciones, por favor marque esta site

Cuestiones relacionadas