Почтовое вложение PHP пустое - PullRequest
0 голосов
/ 13 января 2010

Я получил форму, чтобы принять вложение и отправить вложение, но если это документ, он пуст:

   $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');

Письмо отправлено правильно, есть вложение с правильным именем, типом файла и размером файла. когда он открывается, он пуст.

Я получил учебник с сайта: http://articles.sitep... ... mail-php / 5

Я проверил файлы, которые они предоставляют, и происходит то же самое. Любые идеи будут великолепны. спасибо всем!

Ответы [ 5 ]

2 голосов
/ 13 января 2010

Почему бы не использовать приличную библиотеку для отправки писем?

Я настоятельно рекомендую вам начать использовать библиотеку для отправки электронных писем, это облегчает процесс написания электронных писем и делает код намного более быстрым.

Я могу поручиться за Swiftmailer , активно развивающуюся библиотеку с превосходными функциями.

Особенно сложные задачи, такие как вложения, встроенные изображения и множественные получатели, реализуются легко.

2 голосов
/ 13 января 2010

Я бы настоятельно рекомендовал бы использовать ранее существующий инструмент для отправки электронных писем, например Swift . Есть много предостережений, о которых он позаботится для вас, и их довольно просто использовать.

2 голосов
/ 13 января 2010

Добро пожаловать на SO.

Это не прямой ответ на ваш вопрос, но я бы порекомендовал вам использовать готовый класс рассылки, такой как PHPMailer . Он имеет все встроенные функции, функции кодирования и присоединения, которые гораздо менее подвержены ошибкам, чем ручная работа. Если вы хотите пойти по этому пути, возможно, эта коллекция учебных пособий на PHPMailer поможет вам начать работу.

1 голос
/ 13 января 2010

Возможно, вы могли бы использовать \r\n вместо этих \n\n

0 голосов
/ 16 августа 2010

Ответ с примером кода здесь: http://www.webcheatsheet.com/PHP/send_email_text_html_attachment.php

...