2010-01-12 223 views
0

我得到的形式接受一个附件,发送附件,但如果它是一个文档是空白:PHP邮件附件是空白

 
    $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("[email protected]", "Form", $content, $headers); 
     if($send) 
      header('Location: success page'); 
     else 
      header('Location: fail page'); 

电子邮件正确地发送,没有用正确的名称,文件附件类型和文件大小。当它打开时它是空的。

我教程从sitepoint:http://articles.sitep ......邮件PHP/5

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

+0

这不是PHPBB .....不要使用'[代码]'标签。 – 2010-01-12 22:15:54

+0

我在离线服务器上尝试了我的代码。我保持文件完全一样我甚至离开了ini_set调用: ini_set(“SMTP”,“smtp.server.com”); ini_set(“smtp_port”,“25”); ini_set(“sendmail_from”,“$ email”); 导致我相信这个问题是PHP所在的Web服务器。有任何想法吗? – dcp3450 2010-01-13 17:21:10

回答

2

欢迎来到SO。

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

+0

同意,只使用PHPMailer! – Eduardo 2010-01-12 22:21:18

+0

我在其他论坛上看到过有关邮件处理的多次提示。我会检查出来的。 – dcp3450 2010-01-12 23:07:23

2

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

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

我可以为Swiftmailer担保,这是一个积极开发的具有卓越功能的图书馆。

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

+0

Swiftmailer的网站包含优秀的文档,既实用又深入。图书馆的快速参考向您展示了如何创建消息:http://swiftmailer.org/docs/message-quickref 祝你好运! – 2010-01-12 22:26:21

+0

我需要将附件上传到我的网络服务器才能发送它? – dcp3450 2010-01-13 15:38:32

+0

是的,你永远都是。 – 2010-01-13 19:47:17

2

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

1

也许你可以使用\r\n,而不是那些\n\n

+1

+1第一个DIRCET答案。这还不够,但这是一个很好的起点,您必须使用“\ r \ n”而不是“\ n \ n”。 – 2010-08-16 11:57:55