如何使用php将文档附加到电子邮件

如何使用php将文档附加到电子邮件,php,email,Php,Email,我的网站目录中有一个文档,我想在单击“提交”按钮时将其附加到电子邮件中,但在使其正常工作时遇到问题,我不太明白如何在不出错的情况下执行此操作。这就是我目前所拥有的 $message = "Body Test"; $attachment = $myFile=fopen("DATA/EmailDoc.txt","r") or exit("Can't open file!"); fclose($myFile); if (isset($_POST['submit'])){ mai

我的网站目录中有一个文档,我想在单击“提交”按钮时将其附加到电子邮件中,但在使其正常工作时遇到问题,我不太明白如何在不出错的情况下执行此操作。这就是我目前所拥有的

$message = "Body Test";
$attachment = $myFile=fopen("DATA/EmailDoc.txt","r") or exit("Can't open file!"); fclose($myFile);
    if (isset($_POST['submit'])){
        mail('sulmaxcp@gmail.com', 'Subject Test', $message);
    }

使用类,以便可以附加需要发送的文件和其他需要的项目。

使用php的原生
邮件功能,这是可行的,但非常困难。
您需要自己实现mail的多部分协议(需要指定额外的头并在正文中对附件进行编码)

下面是一个多部分邮件的外观示例(摘自)

发件人:Nathaniel Borenstein
致:内德·弗里德
主题:示例消息
MIME版本:1.0
内容类型:多部分/混合;boundary=“简单
边界“
这是序言。这是可以忽略的,尽管它
是一个方便的地方,邮件编写者可以将
非MIME兼容读者的解释性说明。
--简单边界
这是隐式类型的纯ASCII文本。
它不会以换行符结束。
--简单边界
内容类型:文本/纯文本;字符集=美国ascii码
这是显式键入的纯ASCII文本。
它以换行符结束。
--简单边界--
这是结束语。这也是不容忽视的。
这意味着,您首先需要将特定的内容类型头传递给邮件,其中边界值指定邮件中所有部分之间的分隔符(通常有两部分:邮件的实际内容和附件)

然后在邮件正文中,您需要一个包含所有这些部分的字符串,如上面的示例所示。 如果您想附加二进制文件,事情会更加复杂,因为您可能需要对这些二进制图像进行base64编码,并将使用的编码添加到已编码的零件头中

总而言之:如果你想要附件,不要使用php
mail
函数,而是使用类似的工具,这将更高级、更简单。

可能重复的
 From: Nathaniel Borenstein <nsb@bellcore.com> 
 To:  Ned Freed <ned@innosoft.com> 
 Subject: Sample message 
 MIME-Version: 1.0 
 Content-type: multipart/mixed; boundary="simple 
 boundary" 

 This is the preamble.  It is to be ignored, though it 
 is a handy place for mail composers to include an 
 explanatory note to non-MIME compliant readers. 
 --simple boundary 

 This is implicitly typed plain ASCII text. 
 It does NOT end with a linebreak. 
 --simple boundary 
 Content-type: text/plain; charset=us-ascii 

 This is explicitly typed plain ASCII text. 
 It DOES end with a linebreak. 

 --simple boundary-- 
 This is the epilogue.  It is also to be ignored.