Jump to content
  • 0

Приходит на почту пустой файл, вместо того, что отправляли


n0_th1nk
 Share

Question

Добрый день.

 

У меня есть сайт, mistik.me (хост - sweb.ru), там есть форма с type="file". Форма работает, файл отправляет на почту, но проблема в том, что на почту приходит файл с именем noname, без расширения и весом 0 байт. 

Скрипт на другом хостинге работает ( по кр. мере работал месяц назад):

<?PHP header("Content-Type: text/html; charset=utf-8");?><meta http-equiv="content-type" content="text/html; charset=UTF-8" /><?php  $to = "***********************";  $from = "***********************";  $subject = "Заявка с сайта";/* Здесь мы проверяем существуют ли переменные, которые передала форма обратной связи. Если не существуют, то мы их создаем */if (isset($_POST['name'])) {$name = $_POST['name'];}if (isset($_POST['mail'])) {$mail = $_POST['mail'];}$mes = "<p>Имя: $name</p>  <p>E-mail: $mail</p>";if ($_FILES['mail_file']['error']==0) {  // $filename = $_FILES['mail_file']['tmp_name']; //Имя файла для прикрепления  $filename2 = $_FILES['mail_file']['name'];  $message = $mes; //Текст письма  $boundary = "—"; //Разделитель  /* Заголовки */  $headers = "From: $from\nReply-To: $from\n";  $headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";  $body = "--$boundary\n";  /* Присоединяем текстовое сообщение */  $body .= "Content-type: text/html; charset='utf-8'\n";  $body .= "Content-Transfer-Encoding: quoted-printablenn";  $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename2)."?=\n\n";  $body .= $message."\n";  $body .= "--$boundary\n";  $file = fopen($filename, "r"); //Открываем файл  $text = fread($file, filesize($filename)); //Считываем весь файл  fclose($file); //Закрываем файл  /* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */  $body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($filename2)."?=\n";   $body .= "Content-Transfer-Encoding: base64\n";  $body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename2)."?=\n\n";  $body .= chunk_split(base64_encode($text))."\n";  $body .= "--".$boundary ."--\n";  $send = mail($to, $subject, $body, $headers); //Отправляем письмо} else {  /* А это функция, как раз занимается отправкой письма на указанный выше адрес */  $send = mail ($to,$subject,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$from");}?>

Вот код формы:

<form action="form.php" class="rf" id="form">              <p>Заявка на расчет<br>стоимости проекта</p>            <div class="center-block">              <div class="input-group">                <span class="input-group-addon"><i class="fa fa-user fa-fw"></i></span>                <input type="text" name="name" class="name form-control rfield" placeholder="Ваше имя:">              </div>              <div class="input-group">                <span class="input-group-addon"><i class="fa fa-envelope fa-fw"></i></span>                <input type="text" name="mail" class="mail form-control rfield" placeholder="Ваша почта:">              </div>              <div class="file_upload">                <button type="button">Обзор</button>                <div>Прикрепить бриф</div>                <input type="file" name="mail_file">              </div>              <button name="ok" class="btn btn_submit">Оставить заявку</button>            </div>          </form>

В чем проблема? Может ли быть проблема в самом хостинге? 

Заранее спасибо

Link to comment
Share on other sites

4 answers to this question

Recommended Posts

  • 0

Ну вот если бы вы заглянули в логи ошибок(или вы их отключили?) то увидели что у вас ругается на строки

 

$file = fopen($filename, "r"); //Открываем файл$text = fread($file, filesize($filename)); //Считываем весь файл

а все потому что переменная $filename не объявлена или если быть точнее она у вас зачем то закоменчена и снизу добавлен дублер. (попробуйте поменять $filename на $filename2)

 

А вообще далеко не лучшая реализация отправки файла... Я бы посоветовал воспользоваться phpmailer

Link to comment
Share on other sites

  • 0

Искал проблему методом тыка, забыл убрать. На самом то деле, было все так:

<?PHP header("Content-Type: text/html; charset=utf-8");?><meta http-equiv="content-type" content="text/html; charset=UTF-8" /><?php$to = "************";$from = "************";$subject = "Заявка с сайта";/* Здесь мы проверяем существуют ли переменные, которые передала форма обратной связи. Если не существуют, то мы их создаем */if (isset($_POST['name'])) {$name = $_POST['name'];}if (isset($_POST['mail'])) {$mail = $_POST['mail'];}$mes = "<p>Имя: $name</p><p>E-mail: $mail</p>";if ($_FILES['mail_file']['error']==0) {$filename = $_FILES['mail_file']['tmp_name']; //Имя файла для прикрепления$filename2 = $_FILES['mail_file']['name'];$message = $mes; //Текст письма$boundary = "---"; //Разделитель/* Заголовки */$headers = "From: $from\nReply-To: $from\n";$headers .= "Content-Type: multipart/mixed; boundary=\"$boundary\"";$body = "--$boundary\n";/* Присоединяем текстовое сообщение */$body .= "Content-type: text/html; charset='utf-8'\n";$body .= "Content-Transfer-Encoding: quoted-printablenn";$body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename2)."?=\n\n";$body .= $message."\n";$body .= "--$boundary\n";$file = fopen($filename, "r"); //Открываем файл$text = fread($file, filesize($filename)); //Считываем весь файлfclose($file); //Закрываем файл/* Добавляем тип содержимого, кодируем текст файла и добавляем в тело письма */$body .= "Content-Type: application/octet-stream; name==?utf-8?B?".base64_encode($filename2)."?=\n";$body .= "Content-Transfer-Encoding: base64\n";$body .= "Content-Disposition: attachment; filename==?utf-8?B?".base64_encode($filename2)."?=\n\n";$body .= chunk_split(base64_encode($text))."\n";$body .= "--".$boundary ."--\n";$send = mail($to, $subject, $body, $headers); //Отправляем письмо} else {/* А это функция, как раз занимается отправкой письма на указанный выше адрес */$send = mail ($to,$subject,$mes,"Content-type:text/plain; charset = UTF-8\r\nFrom:$from");}?>

Т.е. почему-то есть дублер. Но все равно приходит файл пустой. 

 

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

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy