PHP-библиотека для генерации файлов электронной почты EML? - PullRequest
7 голосов
/ 08 января 2012

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

Ответы [ 3 ]

11 голосов
/ 08 января 2012

Я закончил сборку сообщения 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

Редактировать (2018): Поскольку этот ответ был написан, кажется, что он был скопирован и вставлен немного везде, в частности, в шаблон.Чтобы избежать конфликта с другими данными MIME, необходимо убедиться, что граница "080107000800000609090108" уникальна - это строка случайных символов длиной не более 70 символов.

6 голосов
/ 08 января 2012

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

3 голосов
/ 19 июля 2013

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

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

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

...