PHP库生成EML电子邮件文件?

时间:2012-01-08 09:12:30

标签: php email eml

我正在尝试从PHP生成EML文件。是否有任何图书馆可以让我轻松创建它们?我可以在互联网上找到一些ActiveX组件,但宁可使用更便携的东西。

3 个答案:

答案 0 :(得分:11)

我最终使用这种模板自己构建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);

此帖子中有关文件附件的其他信息:Attachment name and file extension not working in email *.eml

编辑(2018年):由于这个答案是写的,似乎它已被复制并粘贴到任何地方,特别是模板。为避免与其他MIME数据发生冲突,您应确保边界“080107000800000609090108”是唯一的 - 它是一串不超过70个字符的随机字符。

答案 1 :(得分: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保存。对于附件,请按照here

使用base64_encode()

答案 2 :(得分:2)

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

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

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