2012-01-08 9 views
6

Я пытаюсь создать файлы EML с PHP. Есть ли библиотека, которая позволит мне легко создавать их? Я мог бы найти какой-то компонент ActiveX в Интернете, но скорее использовал бы что-то более портативное.PHP-библиотека для создания файлов электронной почты EML?

+0

Вы хотите создать его с нуля или после чтения электронных писем с функциями imap? Может быть imap_savebody() может помочь - http://www.csschat.com/archive/index.php/t-3287.html? – BartekR

+0

Да, мне нужно создать его с нуля. У меня в основном есть электронная почта, название, тело и привязанность, и вам нужно создать EML для этого. –

ответ

8

Я в конечном итоге здание сообщение MIME себя, используя этот вид шаблона, где каждое поле заменяется 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 

Затем создавая окончательное сообщение довольно просто используя 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); 

Дополнительная информация о вложенном файле в этом сообщении: Attachment name and file extension not working in email *.eml

4

Я думаю, что вам не нужна библиотека. Это просто текст (например 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 

Вы можете только вывод текста с заголовками и сохранить его с помощью FWRITE. Для вложения использовать base64_encode() как указано here

+3

Важно то, что он должен следовать семантике SMTP - то есть CRLF в конце каждого заголовка и пустой строке (заканчивается CRLF) между заголовками и телом. Тело должно быть передано в виде 7 бит ascii (или цитируется для печати). – symcbean

2

Используйте imap_savebody (часть библиотеки imap http://us1.php.net/manual/en/function.imap-savebody.php) с нулевым $ part_number. Он создает красивый .eml-файл с одной строкой кода со всем сообщением (null $ part_number = все части ... не документированы, но работает).

другие два решения зависят от формата электронной почты (только одно приложение и без html-раздела в первом решении, а только текстовое письмо во втором).

imap_savebody создает идеальный файл .eml независимо от формата входящего письма (если это RFC-жалоба, конечно).

+0

по номеру раздела '' параметр '$ part_number' – redexp