1

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

这是我的表格:

<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但是当我尝试打开此文件时,我收到该文件已损坏的消息。

谁能指出我做错了什么?

4

1 回答 1

0

已经完成了同样的任务,我希望我的回答肯定会对您有所帮助。


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

于 2013-10-22T14:21:52.800 回答