Библиотека PHP для создания файлов электронной почты EML?
Я пытаюсь создать файлы EML из PHP. Есть ли библиотека, которая позволит мне легко их создать? Я мог бы найти какой-то компонент ActiveX в интернете, но предпочел бы использовать что-то более портативное.
3 ответов
Я закончил создание сообщения 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);
дополнительная информация о вложении файла в этом сообщении:имя файла и расширение не работает в электронной почте *.эмль!--10-->
изменить (2018): поскольку этот ответ был написан, кажется, он был скопирован и наклеено немного везде, шаблон в частности. Чтобы избежать любого конфликта с другими данными MIME, вы должны убедиться, что граница "080107000800000609090108" уникальна - это строка случайных символов не более 70 символов.
Я думаю, вам не нужна библиотека. Это просто обычный текст (например,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 (часть библиотеки imaphttp://us1.php.net/manual/en/function.imap-savebody.php) с нулевым номером $part_number. Она создает прекрасное .файл eml с одной строкой кода со всем сообщением (null $part_number = all parts... не документировано, но работает).
два других решения зависят от формата письма (только одно вложение и нет раздела html в первом решении, и только текстовое письмо в второй.)
imap_savebody создает идеальный .файл eml независимо от формата входящего письма (если это RFC-жалоба, конечно).