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

lau*_*ent 7 php email eml

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

lau*_*ent 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
Run Code Online (Sandbox Code Playgroud)

然后使用以下方法创建最终消息非常简单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);
Run Code Online (Sandbox Code Playgroud)

有关此帖子中文件附件的其他信息:附件名称和文件扩展名不在电子邮件*.eml中

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


Bar*_*ekR 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
Run Code Online (Sandbox Code Playgroud)

您只需输出带有标题的文本并使用fwrite保存即可.对于附件使用base64_encode()的规定在这里

  • 重要的是它应该遵循SMTP语义 - 即每个标题末尾的CRLF和标题与正文之间的空白行(由CRLF终止).正文应转换为7位ascii(或引用的可打印). (3认同)