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

Форум PHP

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

 

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

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

тема: отправка файла по е-маил
 
 автор: blackcement   (20.08.2009 в 10:59)   письмо автору
 
 

Это скрипт формы обратной связи с возможностью прикрепления файла. Взял с этого же сайта. В этом скрипте отправляемые на мыло файлы сначала сохраняются на сервере в каталоге со скриптом формы. Не могу сделать так чтобы сохранялись в другой каталог. Что-только не пробовал. Помогите пожалуйста.



<?php 

  
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 $_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'];

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

  
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 $path// в этой переменной надо сформировать имя файла (без всякого пути)  

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

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

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

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

    
$headers   .= "From: address@server.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;  

  }
echo 
$path;
?>

  Ответить  
 
 автор: ride   (20.08.2009 в 12:19)   письмо автору
 
   для: blackcement   (20.08.2009 в 10:59)
 

if (copy($_FILES['mail_file']['tmp_name'],  'ваша папка'.$path))


ps
1. вместо copy лучше использовать move_uploaded_file
2. проверку if(empty($picture)) я бы сделал в функции send_mail

  Ответить  
 
 автор: blackcement   (20.08.2009 в 14:09)   письмо автору
 
   для: ride   (20.08.2009 в 12:19)
 

Спасибо! Получилось.
Но вот ещё одна проблема.
Почему строку

$headers   .= "From: address@server.com"; 


нельзя заменить на две такие?

$FR="address@server.com"; 
$headers   .= "From: ".$FR; 


При получении письма отправленного вторым способом, отправитель не указывается.

  Ответить  
 
 автор: ride   (20.08.2009 в 14:36)   письмо автору
 
   для: blackcement   (20.08.2009 в 14:09)
 

а так
$FR="address@server.com"; 
$headers   .= "From: ".$FR.$EOL;

  Ответить  
 
 автор: blackcement   (20.08.2009 в 14:52)   письмо автору
 
   для: ride   (20.08.2009 в 14:36)
 

А, я всё понял. Я просто переменную $FR объявляю за пределами функции. её туда надо передать, а потом из неё лепить уже то что надо. Во как. Спасибо, Ride :)

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

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