2012-01-08 12 views
6

Sto provando a generare file EML da PHP. C'è qualche libreria che mi permetterà di crearli facilmente? Potrei trovare alcuni componenti ActiveX su Internet, ma preferirei usare qualcosa di più portatile.Libreria PHP per generare file di posta elettronica EML?

+0

Vuoi crearlo da zero o dopo aver letto le e-mail con le funzioni imap? Forse imap_savebody() può aiutare - http://www.csschat.com/archive/index.php/t-3287.html? – BartekR

+0

Sì, ho bisogno di crearlo da zero. Fondamentalmente ho un'e-mail, un titolo, un corpo e un allegato e ho bisogno di creare l'EML per quello. –

risposta

8

ho finito per costruire il messaggio MIME me utilizzando questo tipo di modello, in cui ogni campo viene sostituito da una variabile 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 

Poi creare il messaggio finale è abbastanza semplice utilizzando 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); 

Ulteriori informazioni su file allegato in questo post: Attachment name and file extension not working in email *.eml

4

Penso che tu non abbia bisogno di una biblioteca. E 'solo di testo (ad esempio 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 

È possibile il testo appena uscita con le intestazioni e salvarlo utilizzando fwrite. Per gli allegati utilizzano base64_encode() come dichiarato here

+3

La cosa importante è che dovrebbe seguire la semantica SMTP - cioè CRLF alla fine di ogni intestazione e una riga vuota (terminata da CRLF) tra le intestazioni e il corpo. Il corpo dovrebbe essere trasferito codificato come 7 bit ascii (o stampabile quotato). – symcbean

2

Utilizzare imap_savebody (parte della libreria imap http://us1.php.net/manual/en/function.imap-savebody.php) con null $ numero_part. Crea un bellissimo file .eml con una riga di codice con l'intero messaggio (null $ numero_partenza = tutte le parti ... non documentate ma funziona).

le altre due soluzioni dipendono dal formato dell'email (solo un allegato e nessuna sezione html nella prima soluzione e solo email di testo nella seconda).

imap_savebody crea un file .eml perfetto a prescindere dal formato del messaggio di posta elettronica in arrivo (purché si tratti di un reclamo RFC, ovviamente).

+0

per 'numero di sezione' indica il parametro' $ numero_parte' – redexp

Problemi correlati