2010-01-12 6 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 ..... Не используй '[код]' тег. –

+0

Я пробовал свой код на удаленном сервере. Я сохранил файл точно так же, я даже оставил вызовы ini_set: ini_set («SMTP», «smtp.server.com»); ini_set ("smtp_port", "25"); ini_set ("sendmail_from", "$ email"); Приводит меня к мысли, что проблема связана с веб-сервером, на котором сидит php. Есть идеи? – dcp3450

ответ

2

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

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

+0

Согласен, просто используйте PHPMailer! – Eduardo

+0

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

2

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

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

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

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

+0

Веб-сайт Swiftmailer содержит отличную документацию, которая является как прагматичной, так и углубленной. Краткая ссылка библиотеки показывает вам, как создавать сообщения: http://swiftmailer.org/docs/message-quickref Удачи! –

+0

am Мне нужно загрузить приложение на свой веб-сервер, прежде чем я могу его отправить? – dcp3450

+0

Да, вы всегда. –

2

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

1

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

+1

+1 ответ 1-го DIRCET. Этого недостаточно, но это хорошая отправная точка, вы должны использовать «\ r \ n» и НЕ «\ n \ n». –

0

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

+0

проблема в том, что php, похоже, лишает заголовок. Я поместил php, который обрабатывает отправку электронной почты с вложением на другой сервер, и он отлично работает. – dcp3450

Смежные вопросы