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

Форум PHP

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

 

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

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

тема: Отправка письма с вложением
 
 автор: cheops   (31.07.2005 в 12:56)   письмо автору
 
 

Тема возникает достаточно часто, поэтому, принято решение оформить это небольшое Web-приложение в виде отдельного примера в разделе PHP-скрипты.

http://www.softtime.ru/scripts/mailattach.php

   
 
 автор: Alex.W   (31.07.2005 в 23:49)   письмо автору
 
   для: cheops   (31.07.2005 в 12:56)
 

Жалко, но не работает ваша форма :(
для начала обратите внимание на строки 17 и 18 ;)
---------------------------------------------
$thm = $_POST['mail_subject']
$msg = "$_POST['mail_msg']";
----------------------------------------------

   
 
 автор: Akira   (01.08.2005 в 00:18)   письмо автору
 
   для: Alex.W   (31.07.2005 в 23:49)
 

Исправленная версия. Правда проверял на локальном хосте. Так, что не знаю доходит ли с вложением. Но текст точно доходит. Если cheops'у будет интересно могу выложить строки с ошибками.

<?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"); 

  
$_POST['mail_to'] = htmlspecialchars(stripslashes($_POST['mail_to'])); 

  
$_POST['mail_subject'] = htmlspecialchars(stripslashes($_POST['mail_subject'])); 

  
$_POST['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg'])); 



  
$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'];
  
$to $_POST['mail_to'];

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

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

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

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

  
function send_mail($to$thm$html$path

  { 

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

    if (!
$fp

    { 

      print 
"Файл $path не может быть прочитан"

      exit(); 

    } 

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

    
fclose($fp); 

    
$path substr($path,12); 

    

    
$boundary "--".md5(uniqid(time())); // генерируем разделитель 

    
$headers .= "MIME-Version: 1.0\n"

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

    
$multipart .= "--$boundary\n"

    
$kod 'koi8-r'// или $kod = 'windows-1251'; 

    
$multipart .= "Content-Type: text/html; charset=$kod\n"

    
$multipart .= "Content-Transfer-Encoding: Quot-Printed\n\n"

    
$multipart .= "$html\n\n"



    
$message_part ""

    
$message_part .= "Content-Type: application/octet-stream"

    
$message_part .= "; file_name = \"$path\"\n"

    
$message_part .= "Content-Transfer-Encoding: base64\n"

    
$message_part .= "Content-Disposition: attachment; filename = \"".$path."\"\n\n"

    
$message_part .= chunk_split(base64_encode($file))."\n"

    
$multipart .= "--$boundary\n".$message_part."--$boundary--\n"



    if(!
mail($to$thm$multipart$headers)) 

    { 

      echo 
"К сожалению, письмо не отправлено"

      exit(); 

    } 

  } 
?>

   
 
 автор: cheops   (01.08.2005 в 00:30)   письмо автору
 
   для: Akira   (01.08.2005 в 00:18)
 

>Если cheops'у будет интересно могу выложить строки с ошибками.
Интересует, может опять чего забыл.

   
 
 автор: Akira   (01.08.2005 в 00:39)   письмо автору
 
   для: cheops   (01.08.2005 в 00:30)
 


  $thm = $_POST['mail_subject']
  $msg = "$_POST['mail_msg']";

Как видно пропущена ";"
Потом использовалось переменная $users['email'] которой не существовало, ее я заменил на переменную $to

$to = $_POST["mail_to"]

Вот и все.

   
 
 автор: cheops   (01.08.2005 в 00:42)   письмо автору
 
   для: Akira   (01.08.2005 в 00:39)
 

Точку с запятой после $thm пропустил, спасибо.

   
 
 автор: Alex.W   (01.08.2005 в 10:44)   письмо автору
 
   для: Akira   (01.08.2005 в 00:18)
 

текст доходит, вложение нет

   
 
 автор: cheops   (01.08.2005 в 13:15)   письмо автору
 
   для: Alex.W   (01.08.2005 в 10:44)
 

Спасбо, за терпение при тестировании, если вам не сложно, проверьте новый вариант скрипта.

http://www.softtime.ru/scripts/mailattach.php

   
 
 автор: cheops   (01.08.2005 в 00:28)   письмо автору
 
   для: Alex.W   (31.07.2005 в 23:49)
 

Спасибо, поправлено.

http://www.softtime.ru/scripts/mailattach.php

   
 
 автор: Akira   (01.08.2005 в 00:41)   письмо автору
 
   для: cheops   (01.08.2005 в 00:28)
 

Ошибка пропущена ";"

$thm = $_POST['mail_subject']
$msg = $_POST['mail_msg'];

   
 
 автор: cccp   (01.08.2005 в 13:19)   письмо автору
 
   для: Akira   (01.08.2005 в 00:41)
 

А можно ли сделать так что-бы етот человек получил афтоматически письмо на свой почтовий адресс, типа "спасибо товарищ..."

И ешё, я бы хотел что бы можно было послать только файлы типа "image" (.jpg, .gif, ...)

Спасибо ещё раз

   
 
 автор: cheops   (01.08.2005 в 13:28)   письмо автору
 
   для: cccp   (01.08.2005 в 13:19)
 

Можно, но давайте для этого новую тему заведём.

   
 
 автор: cccp   (01.08.2005 в 16:16)   письмо автору
 
   для: cheops   (01.08.2005 в 13:28)
 

давайте

   
 
 автор: cccp   (02.08.2005 в 03:53)   письмо автору
 
   для: cccp   (01.08.2005 в 16:16)
 

Привет ребята ещё раз!
Слушайте, помогите пожалуста составить скрипт обробатывающий мой формуляр.
У меня в формуляре есть такие ячейки:


<input name="name" type="text" value="">
<input name="mail" type="text" value="">
<input name="date" type="text" value="">
<input name="cheveux" type="text" value="">
<input name="yeux" type="text" value="">
<input name="taille" type="text" value="">
<textarea name="expirience" cols="18" wrap="VIRTUAL"></textarea>
<textarea name="lettre" cols="50" rows="04" wrap="VIRTUAL" id="EmailforIgostaCasting" style="font-size:11px;" onFocus="if(this.value=='Votre message...')this.value='';">Votre message...</textarea>
 <input name="photos" type="file" id="photos">


А ето обробатывающий скрипт:

<?php
include("data/config.inc1.php");
if(
$_POST['mail']=="" or $_POST['mail']=="[Votre boite]") {
    
$mess="Vous devez indiquer votre <u>Adresse E-mail</u>!"$title="Erreur!";
} elseif(!
strstr($_POST['mail'],"@") or !strstr($_POST['mail'],".")) {
    
$mess="Votre adresse <u>exacte</u> est n&#233;c&#233;ssaire pour l'envoi de votre message."$title="Erreur!";
} elseif (!isset(
$_POST['lettre']) or $_POST['lettre']=="") {
    
$mess="Votre <u>message est n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!";
} else {
    if(!isset(
$_POST['name']) or $_POST['name']=="[Votre nom]"$_POST['name']="anonymous";
    
$body=strip_tags($_POST['lettre']);
    
$headers ="From: ".strip_tags($_POST['name'])."<".strip_tags($_POST['mail']).">\n";
    
$headers.="X-Sender: TSB Mailer\n";
    
$headers.="Content-Type: text/html; charset=".$sendchar;
    
$sign=array("\r","\n");
    
$ch=array("","");
    
mail($sendmail,$sendtheme,$body,$headers);
    
$his_f=fopen("data/history.txt","a+");
    
fputs($his_f,"\n".mktime().":|:".strip_tags($_POST['name']).":|:".strip_tags($_POST['mail']).":|:".str_replace($sign,$ch,strip_tags($_POST['lettre'])));
    
fclose($his_f);
    
$mess="<font color='#cccccc' size='2'><br><br><br><br>Votre message a &#233;t&#233; envoy&#233; avec succes!<br>Merci.</font>"$title="Message envoy&#233; avec succes!"$sent="ok";
}
?>
<html>
<head><title><?php echo $title?></title><meta http-equiv="Content-Type" content="text/html; charset=windows-1250"></head>
<style>
    a:link {color:blue; text-decoration:none; font-size:11px;}
    a:visited {color:blue; text-decoration:none; font-size:11px;}
    a:hover {color:#A8A8A8; text-decoration:none; font-size:11px;}
    a:active {color:#A8A8A8; text-decoration:none; font-size:11px;}
    .mess {font-family:verdana;font-size:12px;text-align:center;}
</style>
<BODY bgcolor="5E514A" style="scrollbar-face-color:#5E514A;scrollbar-track-color:#5E514A;scrollbar-shadow-color:#392F2A;scrollbar-highlight-color:#392F2A;scrollbar-3dlight-color:#5E514A;scrollbar-darkshadow-color:#79665D">
<?php
if(isset($sent) and $sent=="ok") echo '<p class="mess"><b>'.$mess.'</b>';
else echo 
'<p class="mess"><b><font color=red><br><br><br><br>Erreur: </font>'.$mess.'</b>';
?>
<div align="center"></div>
<div align="center"></div>
<div align="center"></div>
<p align="center"><br>
  <br>
  <a href="show_form1.php" title=<?php echo $_SERVER['HTTP_REFERER']; ?>><font color="#999999" face="Arial, Helvetica, sans-serif">[retour]</font></a><font face="Arial, Helvetica, sans-serif"><br>
  <A href=# onclick="window.close()"><font color="#999999">fermer</font></A></font></p>
</body>
</html>

Как вы поняли я добавил кое какие ячейки сам, а в обробатывающием скрипте отмечены толко 3.
Проблема в том что, я хотел-бы добавить и остальные , а потом загвоздка вся состоит из того что я бы хотел что-бы к письму можно было-бы прикреплять только фото файлы (что бы всякую фигню не слали, а только то что мне надо).
Ну и хотелось бы что бы после отправки мне этого писма люди получили бы на свою почту писмо с благодарностью.
Как вы поняли этот формуляр отправляется через файл в котором прописан мой почтовый адресс "data/config.inc1.php"
Пожалуста помогите братцы окробатцы!

   
 
 автор: cheops   (02.08.2005 в 12:43)   письмо автору
 
   для: cccp   (02.08.2005 в 03:53)
 

Добавьте строки вида
<?php
   $_POST
['mail_msg'] .= "name - ".$_POST['name']."<br>";
   
$_POST['mail_msg'] .= "mail - ".$_POST['mail']."<br>";
   
$_POST['mail_msg'] .= "date - ".$_POST['date']."<br>";
   
$_POST['mail_msg'] .= "cheveux - ".$_POST['cheveux']."<br>";
   
$_POST['mail_msg'] .= "yeux - ".$_POST['yeux']."<br>";
   
$_POST['mail_msg'] .= "taille - ".$_POST['taille']."<br>";
   
$_POST['mail_msg'] .= "lettre - ".$_POST['lettre']."<br>";
?>

Для проверки файла фотографии добавьте строки
<?php
    
// Извлекаем из имени файла расширение
    
$ext strrchr($_FILES['photos']['name'], "."); 
    
// Разрешаем загружать файлы только определённого форматм
    
$extentions = array(".jpg",".gif");
    
// Формируем путь к файлу    
    
if(!in_array($ext$extentions)) exit("Недопустимый формат файла");
?>

   
 
 автор: cccp   (02.08.2005 в 13:10)   письмо автору
 
   для: cheops   (02.08.2005 в 12:43)
 

Спасибо ещё раз cheops!
И что совсем не важно куда именно добавить эти строки? Или-же после определлённых строк?
Потом, надо-ли что бы они все были в отдельных от всех <?php ?>

   
 
 автор: cheops   (02.08.2005 в 13:26)   письмо автору
 
   для: cccp   (02.08.2005 в 13:10)
 

Первый блок следует добавить после строки
<?php
$_POST
['mail_msg'] = htmlspecialchars(stripslashes($_POST['mail_msg']));
?>

а второй перед строкой
<?php
if (!empty($_FILES['mail_file']['tmp_name']))
?>

   
 
 автор: cccp   (02.08.2005 в 23:23)   письмо автору
 
   для: cheops   (02.08.2005 в 13:26)
 

OK ;)
Mucha, mucha Gracias !

   
 
 автор: cccp   (03.08.2005 в 04:42)   письмо автору
 
   для: cccp   (02.08.2005 в 23:23)
 

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


<?php 
include("data/config.inc.php"); 
if(
$_POST['mail']=="" or $_POST['mail']=="[Votre boite]") { 
    
$mess="Vous devez indiquer votre <u>Adresse E-mail</u>!"$title="Erreur!"
} elseif(!
strstr($_POST['mail'],"@") or !strstr($_POST['mail'],".")) { 
    
$mess="Votre adresse <u>exacte</u> est n&#233;c&#233;ssaire pour l'envoi de votre message."$title="Erreur!"
} elseif (!isset(
$_POST['date']) or $_POST['date']=="") { 
    
$mess="Votre date de naissance est n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!"
} elseif (!isset(
$_POST['cheveux']) or $_POST['cheveux']=="") { 
    
$mess="Votre couleur de cheveux est n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!"
} elseif (!isset(
$_POST['yeux']) or $_POST['yeux']=="") { 
    
$mess="Votre couleur de yeux est n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!"
} elseif (!isset(
$_POST['taille']) or $_POST['taille']=="") { 
    
$mess="Votre taille est n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!"
} elseif (!isset(
$_POST['expirience']) or $_POST['expirience']=="") { 
    
$mess="Votre expirience est n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!"
} elseif (!isset(
$_POST['lettre']) or $_POST['lettre']=="") { 
    
$mess="Votre <u>message est n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!"
} elseif (!isset(
$_POST['photos']) or $_POST['photos']=="") { 
    
$mess="Vos photos sont n&#233;c&#233;ssaire</u> pour effectuer l'envoi de cette lettre..."$title="Erreur!"

    
$picture ""

  
// Esli pole vybora vlozhenija ne pustoe - zakachivaem ego na server  

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

  { 

    
// Zakachivaem fajl  

    
$path $_FILES['photos']['name']; 

    
// Izvlekaem iz imeni fajla rasshirenie 
    
$ext strrchr($_FILES['photos']['name'], "."); 
    
// Razreshaem zagruzhat' fajly tol'ko opredeljonnogo formatm  
    
$extentions = array(".jpg",".gif"); 
    
// Formiruem put' k fajlu      
    
if(!in_array($ext$extentions)) exit("Le format de fichier est interdit !"); 

    if (
copy($_FILES['photos']['tmp_name'], $path)) $picture $path;

} else { 
    if(!isset(
$_POST['name']) or $_POST['name']=="[Votre nom]"$_POST['name']="anonymous"
    
$body=strip_tags($_POST['lettre']); 
    
$headers ="From: ".strip_tags($_POST['name'])."<".strip_tags($_POST['mail']).">\n"
    
$headers.="X-Sender: TSB Mailer\n"
    
$headers.="Content-Type: text/html; charset=".$sendchar
    
$sign=array("\r","\n"); 
    
$ch=array("",""); 
    
mail($sendmail,$sendtheme,$body,$headers); 
    
$mess="<font color='#cccccc' size='2'><br><br><br><br>Votre message a &#233;t&#233; envoy&#233; avec succes!<br>Merci.</font>"$title="Message envoy&#233; avec succes!"$sent="ok"

?> 
<html> 
<head><title><?php echo $title?></title><meta http-equiv="Content-Type" content="text/html; charset=windows-1250"></head> 
<style> 
    a:link {color:blue; text-decoration:none; font-size:11px;} 
    a:visited {color:blue; text-decoration:none; font-size:11px;} 
    a:hover {color:#A8A8A8; text-decoration:none; font-size:11px;} 
    a:active {color:#A8A8A8; text-decoration:none; font-size:11px;} 
    .mess {font-family:verdana;font-size:12px;text-align:center;} 
</style> 
<BODY bgcolor="5E514A" style="scrollbar-face-color:#5E514A;scrollbar-track-color:#5E514A;scrollbar-shadow-color:#392F2A;scrollbar-highlight-color:#392F2A;scrollbar-3dlight-color:#5E514A;scrollbar-darkshadow-color:#79665D"> 
<?php 
if(isset($sent) and $sent=="ok") echo '<p class="mess"><b>'.$mess.'</b>'
else echo 
'<p class="mess"><b><font color=red><br><br><br><br>Erreur: </font>'.$mess.'</b>'
?> 
<div align="center"></div> 
<div align="center"></div> 
<div align="center"></div> 
<p align="center"><br> 
  <br> 
  <a href="show_form.php" title=<?php echo $_SERVER['HTTP_REFERER']; ?>><font color="#999999" face="Arial, Helvetica, sans-serif">[retour]</font></a><font face="Arial, Helvetica, sans-serif"><br> 
  <A href=# onclick="window.close()"><font color="#999999">fermer</font></A></font></p> 
</body> 
</html>

   
Rambler's Top100
вверх

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