2012-01-08 12 views
6

Estoy tratando de generar archivos EML desde PHP. ¿Hay alguna biblioteca que me permita crearlos fácilmente? Podría encontrar algún componente de ActiveX en Internet, pero preferiría usar algo más portátil.Biblioteca PHP para generar archivos de correo electrónico EML?

+0

¿Desea crearlo desde cero o después de leer el correo electrónico con funciones imap? Tal vez imap_savebody() puede ayudar - http://www.csschat.com/archive/index.php/t-3287.html? – BartekR

+0

Sí, necesito crearlo desde cero. Básicamente tengo un correo electrónico, título, cuerpo y archivo adjunto y necesito crear el EML para eso. –

Respuesta

8

Terminé la construcción del mensaje MIME a mí mismo usando este tipo de plantilla, donde cada campo se sustituye por una variable TEMPLATE_<name>:

From: TEMPLATE_FROM_ADDRESS 
MIME-Version: 1.0 
To: TEMPLATE_TO_ADDRESS 
Subject: TEMPLATE_SUBJECT 
Content-Type: multipart/mixed; boundary="080107000800000609090108" 

This is a message with multiple parts in MIME format. 
--080107000800000609090108 
Content-Type: text/plain 

TEMPLATE_BODY 
--080107000800000609090108 
Content-Type: application/octet-stream;name="TEMPLATE_ATTACH_FILENAME" 
Content-Transfer-Encoding: base64 
Content-Disposition: attachment;filename="TEMPLATE_ATTACH_FILENAME" 

TEMPLATE_ATTACH_CONTENT 
--080107000800000609090108 

Luego de crear el mensaje final es bastante sencillo utilizando str_replace:

$content = file_get_contents("Template.eml"); 
$content = str_replace("TEMPLATE_FROM_ADDRESS", $fromEmail, $content); 
$content = str_replace("TEMPLATE_TO_ADDRESS", $toEmail, $content); 
// etc. for each template parameter 
// Also don't forget to base64_encode the attachment content; 
$content = str_replace("TEMPLATE_ATTACH_CONTENT", base64_encode($attachContent), $content); 

información adicional sobre el archivo adjunto en este post: Attachment name and file extension not working in email *.eml

4

Creo que no necesita una biblioteca. Es sólo texto sin formato (por ejemplo http://bitdaddys.com/example1.eml)

Date: Sat, 12 Aug 2006 14:25:25 -0400 
From: John Doe <[email protected]> 
Subject: BitDaddys Software 
To: [email protected] 

Dear BitDaddys Corp., 

We have added your software to our approved list. 

Thank you for your efforts. 

Sincerely, 
John Doe 
Some Server Company 

Puede texto que acaba de salida con cabeceras y guardarlo usando fwrite. Por adjuntos utilizan base64_encode() como se indica here

+3

Lo importante es que debe seguir la semántica de SMTP, es decir, CRLF al final de cada encabezado y una línea en blanco (terminada por CRLF) entre los encabezados y el cuerpo. El cuerpo se debe transferir codificado como 7bit ascii (o imprimible entre comillas). – symcbean

2

Utilice imap_savebody (parte de la biblioteca de imap http://us1.php.net/manual/en/function.imap-savebody.php) con nulo $ part_number. Crea un hermoso archivo .eml con una línea de código con el mensaje completo (nulo $ part_number = todas las partes ... no documentadas, pero funciona).

las otras dos soluciones dependen del formato del correo electrónico (solo un archivo adjunto y ninguna sección html en la primera solución, y solo texto en el segundo).

imap_savebody crea un archivo .eml perfecto sin importar el formato del correo electrónico entrante (siempre que sea una queja de RFC, por supuesto).

+0

por 'section number' significa parámetro' $ part_number' – redexp

Cuestiones relacionadas