2009-03-26 8 views
7

Aquí está la secuencia de comandos que es construye/envía el correo electrónico:Problemas con el envío de un correo electrónico de varias partes/alternativo con PHP

$boundary = md5(date('U')); 

$to = $email; 
$subject = "My Subject"; 

$headers = "From: [email protected]" . "\r\n". 
      "X-Mailer: PHP/".phpversion() ."\r\n". 
      "MIME-Version: 1.0" . "\r\n". 
      "Content-Type: multipart/alternative; boundary=--$boundary". "\r\n". 
      "Content-Transfer-Encoding: 7bit". "\r\n"; 

$text = "You really ought remember the birthdays";  
$html = '<html> 
    <head> 
     <title>Birthday Reminders for August</title> 
    </head> 
    <body> 
     <p>Here are the birthdays upcoming in August!</p> 
     <table> 
     <tr> 
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th> 
     </tr> 
     <tr> 
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td> 
     </tr> 
     <tr> 
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td> 
     </tr> 
     </table> 
    </body> 
    </html> 
    '; 

$message = "Multipart Message coming up" . "\r\n\r\n". 
     "--".$boundary. 
     "Content-Type: text/plain; charset=\"iso-8859-1\"" . 
     "Content-Transfer-Encoding: 7bit". 
     $text. 
     "--".$boundary. 
     "Content-Type: text/html; charset=\"iso-8859-1\"". 
     "Content-Transfer-Encoding: 7bit". 
     $html. 
     "--".$boundary."--"; 



mail("[email protected]", $subject, $message, $headers); 

que envía el mensaje muy bien, y mi destinatario lo recibe, pero consiguen todo el asunto en texto/plano en lugar de en multiparte/alternativa. Visualización de la fuente del mensaje recibido (da esta gran cantidad de costra eliminados):

Delivered-To: [email protected] 
Received: by 10.90.100.4 with SMTP id x4cs111413agb; 
    Wed, 25 Mar 2009 16:39:32 -0700 (PDT) 
Received: by 10.100.153.6 with SMTP id a6mr85081ane.123.1238024372342; 
    Wed, 25 Mar 2009 16:39:32 -0700 (PDT) 
Return-Path: <[email protected]> 
--- snip --- 
Date: Wed, 25 Mar 2009 17:37:36 -0600 (MDT) 
Message-Id: <[email protected]> 
To: [email protected] 
Subject: My Subject 
From: [email protected] 
X-Mailer: PHP/4.3.9 
MIME-Version: 1.0 
Content-Type: text/plain; 
boundary="--66131caf569f63b24f43d529d8973560" 
Content-Transfer-Encoding: 7bit 
X-OriginalArrivalTime: 25 Mar 2009 23:38:30.0531 (UTC) FILETIME=[CDC4E530:01C9ADA2] 
X-TM-AS-Product-Ver: SMEX-8.0.0.1181-5.600.1016-16540.005 
X-TM-AS-Result: No--4.921300-8.000000-31 
X-TM-AS-User-Approved-Sender: No 
X-TM-AS-User-Blocked-Sender: No 


Multipart Message coming up 

--66131caf569f63b24f43d529d8973560 
Content-Type: text/plain; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

You really ought remember the birthdays 

--66131caf569f63b24f43d529d8973560 
Content-Type: text/html; charset="iso-8859-1" 
Content-Transfer-Encoding: 7bit 

<html> 
    <head> 
     <title>Birthday Reminders for August</title> 
    </head> 
    <body> 
     <p>Here are the birthdays upcoming in August!</p> 
     <table> 
     <tr> 
      <th>Person</th><th>Day</th><th>Month</th><th>Year</th> 
     </tr> 
     <tr> 
      <td>Joe</td><td>3rd</td><td>August</td><td>1970</td> 
     </tr> 
     <tr> 
      <td>Sally</td><td>17th</td><td>August</td><td>1973</td> 
     </tr> 
     </table> 
    </body> 
    </html> 


--66131caf569f63b24f43d529d8973560-- 

Parece que la cabecera de tipo de contenido está siendo cambiado a lo largo del camino de alternativa de varias partes/a text/plain. No soy administrador de sistemas, así que si este es un problema de sendmail, estoy por encima de mi cabeza. ¿Alguna sugerencia?

Respuesta

11

La línea

"Content-Type: multipart/alternative; boundary=--$boundary". "\r\n". 

debería ser

"Content-Type: multipart/alternative; boundary=$boundary". "\r\n". 

No incluya los guiones en la cabecera.

+0

Gaaaaaa! - Gracias RoBorg. Eso fue de hecho. – saturdayplace

+1

Si alguien se preguntaba por qué el script inicial no funciona, simplemente agregue. "\ r \ n" a cada línea en la que consiste $ mensaje, no solo en la primera línea ($ mensaje = "Mensaje de varias partes emergente". "\ r \ n \ r \ n".) Ah, claro, Sam Critchley ya lo había señalado. – Alex

2

uso "\ n" en lugar de "\ r \ n" parece que qmail tiene problemas con

+0

de acuerdo, sé por documentación que no es correcto, pero a menudo enviamos correos masivos a nuestros clientes, y mágicamente si uso el \ r en nuestro servidor, los mensajes se rompen, pero si str_replace \ r para vacío '' (dejando el \ n solamente) tanto en el encabezado como en el cuerpo hace que el correo electrónico llegue bien y se visualice correctamente en la mayoría de los clientes/probado tanto en clientes de escritorio como en webmails/ – Peminator

4

Para conseguir que esto funcione correctamente para mí, yo también tenía que añadir un "\ r "\ r" \ n "al final de cada línea de encabezado, dos de ellos (" \ r \ n \ r \ n ") al final de las líneas antes del texto y los cuerpos html, y uno al final de cada cuerpo. Esto da como resultado algo como esto:

$message = "Multipart Message coming up" . "\r\n\r\n". 
     "--".$boundary."\r\n". 
     "Content-Type: text/plain; charset=\"iso-8859-1\""."\r\n". 
     "Content-Transfer-Encoding: 7bit"."\r\n". 
     $text."\r\n". 
     "--".$boundary."\r\n". 
     "Content-Type: text/html; charset=\"iso-8859-1\""."\r\n". 
     "Content-Transfer-Encoding: 7bit"."\r\n". 
     $html."\r\n". 
     "--".$boundary."--"; 
+3

Esta es la única forma en que funcionaría para mí también. Es sorprendente la cantidad de ejemplos que hay en línea que dejan esto fuera. – twiz

Cuestiones relacionadas