PHP邮件附件是空白的

时间:2010-01-12 22:12:44

标签: php attachment

我收到表单接受附件并发送附件但是如果它是文档则是空白的:

   $fileatt = $_FILES['file']['tmp_name'];
   $fileattType = $_FILES['file']['type'];
   $fileattName = $_FILES['file']['name'];
   $file = fopen($fileatt,'rb');
   $data = fread($file,filesize($fileatt));
   fclose($file);

   $semi_rand = md5(time());
   $mime_boundary = "==Multipart_Boundary_x{$semi_rand}x";

   $headers = "from: $email";

   $headers .= "\nMIME-Version: 1.0\n" .
        "Content-Type: multipart/mixed;\n" .
        " boundary=\"{$mime_boundary}\"";

   $content = "Info about user";

   $content = "This is a multi-part message in MIME format.\n\n" .
        "--{$mime_boundary}\n" .
        "Content-Type: text/plain; charset=\"iso-8859-1\"\n" .
        "Content-Transfer-Encoding: 7bit\n\n" .
        $content . "\n\n";

   $data = chunk_split(base64_encode($data));

   $content .= "--{$mime_boundary}\n" .
        "Content-Type: {$fileattType};\n" .
        " name=\"{$fileattName}\"\n" .
        "Content-Disposition: attachment;\n" .
        " filename=\"{$fileattName}\"\n" .
        "Content-Transfer-Encoding: base64\n\n" .
        $data . "\n\n" .
        "--{$mime_boundary}--\n";

   $send = mail( "user@provider.com", "Form", $content, $headers);
         if($send)
            header('Location: success page');
         else
            header('Location: fail page');

电子邮件正确发送,附件中包含正确的名称,文件类型和文件大小。当它打开时它是空的。

我从sitepoint获得了教程:http://articles.sitep ... ... mail-php / 5

我测试了他们提供的文件,同样的事情发生了。任何想法都会很棒。谢谢大家!

5 个答案:

答案 0 :(得分:2)

欢迎来到SO。

这不是您问题的直接答案,但我建议您使用现成的邮件类,例如PHPMailer。它具有内置的所有怪癖,编码和附加功能,与手工操作相比,它更不容易出错。如果你想这样,PHPMailer上的this collection of tutorial links可能会帮助你入门。

答案 1 :(得分:2)

为什么不使用体面的图书馆发送电子邮件?

我强烈建议您开始使用库来发送电子邮件,这样可以简化编写电子邮件的过程,并使代码更加短暂。

我可以保证Swiftmailer,这是一个积极开发的具有出色功能的图书馆。

附件,内嵌图像和多个收件人等特别复杂的任务很容易实现。

答案 2 :(得分:2)

强烈建议使用预先存在的工具发送电子邮件,例如Swift。它会为你提供很多警告,它很容易使用。

答案 3 :(得分:1)

也许您可以使用\r\n代替那些\n\n

答案 4 :(得分:0)