从表单中的文件输入发送附件

时间:2013-10-22 12:46:46

标签: php html forms email

你好,我有一个收集文件的简单表格。我的意思是用户应该能够将文件放入字段中,然后通过提交表单邮件应该发送到预定义和硬编码的地址。

这是我的表格:

<form action='/?page=admin-send' method='post' class='asholder' enctype=\"multipart/form-data\">\n";
    <input type='file' name='file' id ='file'/><button name='accept' value='".$ssl->id."' type='submit'>Send</button>
</form>

现在使用Php我想收集此文件并将其放入电子邮件附件中。

$file = $_FILES["file"]["name"];
            $filename = basename($file);
            $file_size = filesize($file);
            $content = chunk_split(base64_encode(file_get_contents($file))); 
            $uid = md5(uniqid(time()));
            $msg = "Hello, this is email with attachment!";

            $mail = new HTMLMail();
            $mail->from = 'DO NOT REPLY';
            $mail->to = 'tstmail@testhost.com';
            $mail->subject = 'admin warrning';
            $mail->importance = 'Low';
            $mail->body = "<P><FONT SIZE=2 FACE=\"Tahoma\">$msg</FONT></P>";
            $mail->headers = "From: ".$from."\r\n"
              ."MIME-Version: 1.0\r\n"
              ."Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n"
              ."This is a multi-part message in MIME format.\r\n" 
              ."--".$uid."\r\n"
              ."Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"
              ."Content-Transfer-Encoding: base64\r\n"
              ."Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n"
              .$content."\r\n\r\n"
              ."--".$uid."--"; 

            $mail->send();

以下是我遇到的问题: 我把名称为xyz.pdf的文件放在一些文件中,最重要的是这个文件没问题。当我提交表格时,我收到了电子邮件。电子邮件的附件名称为xyz.pdf,但当我尝试打开此文件时,我收到该文件为borken的消息。

有谁能指出我做错了什么?

1 个答案:

答案 0 :(得分:0)

完成了同样的任务,我希望我的回答能为您提供帮助。


您要让用户 1。上传文件&gt; * 2。 *使用PHP &gt; <在您的服务器端处理它/ strong> * 3。 *以及您正在使用 HTML邮件类发送邮件。
问题出在第三步。如果课程没有为您提供足够的邮件功能,那么就不值得使用。 自己编写邮件HEADERS 会带来很多复杂性,而我们作为开发人员不应该进入内部。
我建议您使用 PHPMailer 5.1.2 来完成这项工作。这非常简单,不超过80KB(核心文件,不包括演示,指南)。
有了这个,你可以附加任何mime类型的文件(pdf,jpeg,doc等)而不用担心标题。这很简单,我已经测试过,附件在邮箱中是可读的 如果您下载带有演示的完整软件包,您将看到使用PHP实现它是多么容易 PHPMailer是最好的免费php类,可以在网上发送邮件(我认为),没有错误 我还没有使用过你正在使用的HTML Mail类,所以不知道它是否具有附加文件的功能。但是编写邮件头并不好。如果您在了解了这一切之后按照您的意愿使用它,那么我很抱歉发布此答案。