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.
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);
这篇文章中有关文件附件的附加信息:附件名称和文件扩展名在电子邮件中不起作用 *.eml
编辑(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()
按此处所述使用
使用带有 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 规范)。