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?
risposta
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
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
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
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).
per 'numero di sezione' indica il parametro' $ numero_parte' – redexp
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
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. –