Я пытаюсь создать EML-файлы из PHP. Есть ли библиотека, которая позволит мне легко создавать их? Я мог бы найти какой-то компонент ActiveX в Интернете, но скорее использовал бы что-то более портативное.
В итоге я создал сообщение 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);
Дополнительная информация о прикреплении файла в этом сообщении: Имя вложения и расширение файла не работают по электронной почте * .eml
Думаю, вам не нужна библиотека. Это просто текст (например, http://bitdaddys.com/example1.eml )
Date: Sat, 12 Aug 2006 14:25:25 -0400 From: John Doe <jdoes@someserver.com> Subject: BitDaddys Software To: sales@bitdaddys.com 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()
как указано здесь
Используйте imap_savebody (часть библиотеки imap http://us1.php.net/manual/en/function.imap-savebody.php ) с нулевым $ part_number. Он создает красивый .eml-файл с одной строкой кода со всем сообщением (null $ part_number = все части … не документированы, но работает).
другие два решения зависят от формата электронной почты (только одно приложение и без html-раздела в первом решении, а только текстовое письмо во втором).
imap_savebody создает идеальный файл .eml независимо от формата входящего письма (если это RFC-жалоба, конечно).