2012-01-08 120 views
6

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

+0

你想从头开始创建它,还是在用imap函数阅读电子邮件之后创建它?也许imap_savebody()可以帮助 - http://www.csschat.com/archive/index.php/t-3287.html? – BartekR 2012-01-08 09:34:47

+0

是的,我需要从头开始创建它。我基本上有一个电子邮件,标题,正文和附件,并需要为此创建EML。 – 2012-01-08 09:41:21

回答

8

我结束了使用这种模板,其中,每个字段由TEMPLATE_<name>变量替换构建MIME消息自己:

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

4

我认为你不需要一个库。这只是纯文本(例如http://bitdaddys.com/example1.eml

Date: Sat, 12 Aug 2006 14:25:25 -0400 
From: John Doe <[email protected]> 
Subject: BitDaddys Software 
To: [email protected] 

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()作为陈述here

+3

重要的是它应该遵循SMTP语义 - 即每个头部末尾的CRLF和头部和主体之间的空行(由CRLF终止)。身体应该被传输编码为7bit ascii(或引用可打印)。 – symcbean 2012-01-08 13:02:17

2

使用空白$ part_number的imap_savebody(imap库的一部分http://us1.php.net/manual/en/function.imap-savebody.php)。它用一行代码和整个消息创建一个美丽的.eml文件(null $ part_number =所有部分...没有记录但可行)。

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

imap_savebody创建一个完美的.eml文件,不管输入电子邮件的格式如何(只要它是RFC投诉)。

+0

'section number'表示'$ part_number'参数 – redexp 2017-01-30 15:10:38

相关问题