8

I'm trying to generate EML files from PHP. Is there any library that will allow me to easily create them? I could find some ActiveX component on the internet but would rather use something more portable.

4

3 回答 3

12

我最终使用这种模板自己构建了 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 个字符的随机字符串。

于 2012-01-08T11:42:30.547 回答
6

我认为你不需要图书馆。它只是纯文本(例如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()此处所述使用

于 2012-01-08T09:50:15.047 回答
4

使用带有 null $part_number的 imap_savebody(imap 库http://us1.php.net/manual/en/function.imap-savebody.php的一部分)。它使用一行代码创建了一个漂亮的 .eml 文件,其中包含整个消息(null $part_number = 所有部分......未记录但有效)。

其他两种解决方案取决于电子邮件的格式(第一种解决方案只有一个附件,没有 html 部分,第二种解决方案只有文本电子邮件)。

无论传入电子邮件的格式是什么,imap_savebody 都会创建一个完美的 .eml 文件(当然,只要它符合 RFC 规范)。

于 2013-07-18T20:39:50.867 回答