Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Отправить файл с хостинга на почту
 
 автор: Den*s   (22.10.2008 в 12:25)   письмо автору
 
 

На хостинге есть файл, как его отправить на email?
И пересылаются ли какие нибудь метки о том, что файл загружен?

  Ответить  
 
 автор: ddhvvn   (22.10.2008 в 14:07)   письмо автору
 
   для: Den*s   (22.10.2008 в 12:25)
 

пример

  Ответить  
 
 автор: Den*s   (22.10.2008 в 21:55)   письмо автору
 
   для: ddhvvn   (22.10.2008 в 14:07)
 

Всё работает нормально, файл присылает как нужно, но почему то любой фай обзывается "Часть.att"
Можно ли это исправить?
может что то напутал во время исправления


<?
 
//if(empty($_POST['mail_to'])) exit("Введите адрес получателя"); 

  // проверяем правильности заполнения с помощью регулярного выражения 

  //if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['mail_to'])) exit("Введите адрес в виде somebody@server.com"); 

  
$picture ""

  
// Если поле выбора вложения не пустое - закачиваем его на сервер 

  
if (!empty($_FILES['mail_file']['tmp_name'])) 

  { 

    
// Закачиваем файл 

    
$path "download/".$_FILES['mail_file']['name']; 
    
    
$file_name=$_FILES['mail_file']['name'];
    
    if (
copy($_FILES['mail_file']['tmp_name'], $path)) $picture $path

  } 

  
$thm $_POST['mail_subject'];

  
$msg $_POST['mail_msg'];

  
$mail_to /*$_POST['mail_to'];*/  "name@mail.ru";

  
// Отправляем почтовое сообщение 

  
if(empty($picture)) mail($mail_to$thm$msg); 

  else 
send_mail($mail_to$thm$msg$picture); 

  
// Вспомогательная функция для отправки почтового сообщения с вложением (Trianon)

  
function send_mail($mail_to$thema$html$path)   

  { if (
$path) {  

    
$fp fopen($path,"rb");   

    if (!
$fp)   

    { print 
"Cannot open file";   

      exit();   

    }   

    
$file fread($fpfilesize($path));   

    
fclose($fp);   

    }  

    
$name $file_name//"file.ext"; // в этой переменной надо сформировать имя файла (без всякого пути)  

    
$EOL "\r\n"// ограничитель строк, некоторые почтовые сервера требуют \n - подобрать опытным путём

    
$boundary     "--".md5(uniqid(time()));  // любая строка, которой не будет ниже в потоке данных.  

    
$headers    "MIME-Version: 1.0;$EOL";   

    
$headers   .= "Content-Type: multipart/mixed; boundary=\"$boundary\"$EOL";  

    
$headers   .= "From: mail@rusenerg.com";  

      

    
$multipart  "--$boundary$EOL";   

    
$multipart .= "Content-Type: text/html; charset=windows-1251$EOL";   

    
$multipart .= "Content-Transfer-Encoding: base64$EOL";   

    
$multipart .= $EOL// раздел между заголовками и телом html-части 

    
$multipart .= chunk_split(base64_encode($html));   



    
$multipart .=  "$EOL--$boundary$EOL";   

    
$multipart .= "Content-Type: application/octet-stream; name=\"$name\"$EOL";   

    
$multipart .= "Content-Transfer-Encoding: base64$EOL";   

    
$multipart .= "Content-Disposition: attachment; filename=\"$name\"$EOL";   

    
$multipart .= $EOL// раздел между заголовками и телом прикрепленного файла 

    
$multipart .= chunk_split(base64_encode($file));   



    
$multipart .= "$EOL--$boundary--$EOL";   

      

        if(!
mail($mail_to$thema$multipart$headers))   

         {return 
False;           //если не письмо не отправлено

      
}  

    else { 
//// если письмо отправлено

    
return True;  

    }  

  exit;  

  }
 print 
"Ваше письмо отправлено.<br>";

?>

  Ответить  
 
 автор: ddhvvn   (22.10.2008 в 22:08)   письмо автору
 
   для: Den*s   (22.10.2008 в 21:55)
 

Но если только Вы не отсылаете файл с расширением .att и если Вы наблюдаете это в обычной почтовой программе, могу предположить, что у Вас стоит какая-нибудь программа на компьютере которая переименовывает файлы в целях безопасности (у меня, например, Outpost)

  Ответить  
 
 автор: Den*s   (22.10.2008 в 22:23)   письмо автору
 
   для: ddhvvn   (22.10.2008 в 22:08)
 

Спасибо за совет но ошибка оказывается в другом
переменная $file_name почему то обнуляется после функции, и файл без имени так обзывается.
Не могу понять почему после функции переменная обнуляется, вот кусок


<?
function send_mail($mail_to$thema$html$path)   

  { if (
$path) {  

    
$fp fopen($path,"rb");   

    if (!
$fp)   

    { print 
"Cannot open file";   

      exit();   

    }   

    
$file fread($fpfilesize($path));   

    
fclose($fp);   

    }  

    
$name $_FILES['mail_file']['name']; //"file.ext"; // в этой переменной надо сформировать имя файла (без всякого пути)
?>

а было

$name =$file_name

  Ответить  
 
 автор: ddhvvn   (22.10.2008 в 22:40)   письмо автору
 
   для: Den*s   (22.10.2008 в 22:23)
 

У Вас же "файл с хостинга"? Т.е. я понимаю, что оттуда же, откуда и скрипт?
Зачем тогда форма отправки?

Ну это лан! Если она есть, то инпут типа файл имеет имя mail_file ? т.е. строка выглядит так:
<input type="file" name="mail_file">
?

Да, и зачем убрали проверку в начале ? ))

  Ответить  
 
 автор: Den*s   (22.10.2008 в 23:39)   письмо автору
 
   для: ddhvvn   (22.10.2008 в 22:40)
 

Задача состоит в следующем:
На сайте зарегистрированный пользователь может отправить файл администратору на почту. Но администратор не очень сечёт в тонкостях (типа что можно через панель администрирования скачать этот файл или что то на подобие) поэтому именно на почту. Значит email уже забит в переменной.
Вот сейчас я думаю как сделать что бы этими файлами не засорить хостинг.
Идея написать скрипт, который будет удалять файлы, чей возраст старше 12 часов...
Хотелось бы выслушать какие идеи есть ещё :)

  Ответить  
 
 автор: sim5   (23.10.2008 в 03:11)   письмо автору
 
   для: Den*s   (22.10.2008 в 23:39)
 

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

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования