我收到表单接受附件并发送附件但是如果它是文档则是空白的:
$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
我测试了他们提供的文件,同样的事情发生了。任何想法都会很棒。谢谢大家!
答案 0 :(得分:2)
欢迎来到SO。
这不是您问题的直接答案,但我建议您使用现成的邮件类,例如PHPMailer。它具有内置的所有怪癖,编码和附加功能,与手工操作相比,它更不容易出错。如果你想这样,PHPMailer上的this collection of tutorial links可能会帮助你入门。
答案 1 :(得分:2)
我强烈建议您开始使用库来发送电子邮件,这样可以简化编写电子邮件的过程,并使代码更加短暂。
我可以保证Swiftmailer,这是一个积极开发的具有出色功能的图书馆。
附件,内嵌图像和多个收件人等特别复杂的任务很容易实现。
答案 2 :(得分:2)
我强烈建议使用预先存在的工具发送电子邮件,例如Swift。它会为你提供很多警告,它很容易使用。
答案 3 :(得分:1)
也许您可以使用\r\n
代替那些\n\n
答案 4 :(得分:0)