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

Форум PHP

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

 

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

вид форума:
Линейный форум (новые сообщения вниз) Структурный форум

тема: Отправка письма с вожением (или без него)

Сообщения:  [1-10] 

 
 автор: Lalita Madhava   (23.02.2006 в 05:52)   письмо автору
 
   для: cheops   (18.02.2006 в 13:32)
 

Благодарю за помощь и терпение!

   
 
 автор: cheops   (18.02.2006 в 13:32)   письмо автору
 
   для: Yuri   (12.02.2006 в 03:25)
 

Вот этот блок
<?php
//--------Ваши переменные переданные из формы-------- 
$name=$_POST['name']; 
$lastname=$_POST['lastname']; 
$email=$_POST['email']; 
$city=$_POST['city']; 
$street=$_POST['street']; 
$house=$_POST['house']; 

// Отправляем почтовое сообщение 
if(empty($picture)) mail($mail_to$thm$msg); 
else 
send_mail($mail_to$thm$msg$picture); 

function 
send_mail($to$thm$html$path

//----Начинаем прикручивать--------- 
$html.="\n\r".$name."\n\r"
$html.=$lastname."\n\r"
$html.=$email."\n\r"
$html.=$city."\n\r"
$html.=$street."\n\r"
$html.=$house."\n\r"
//---------готово--------------
?>

исправить следующим образом
<?php
//--------Ваши переменные переданные из формы-------- 
$name=$_POST['name']; 
$lastname=$_POST['lastname']; 
$email=$_POST['email']; 
$city=$_POST['city']; 
$street=$_POST['street']; 
$house=$_POST['house']; 

// Отправляем почтовое сообщение 
if(empty($picture)) mail($mail_to$thm$msg); 
else 
send_mail($mail_to$thm$msg$picture$name$lastname$email$city$street$house); 

function 
send_mail($to$thm$html$path$name$lastname$email$city$street$house

//----Начинаем прикручивать--------- 
$html.="\n\r".$name."\n\r"
$html.=$lastname."\n\r"
$html.=$email."\n\r"
$html.=$city."\n\r"
$html.=$street."\n\r"
$html.=$house."\n\r"
//---------готово--------------
?>

   
 
 автор: Lalita Madhava   (18.02.2006 в 06:23)   письмо автору
 
   для: Lalita Madhava   (15.02.2006 в 02:16)
 

Здравствуёте, уважаемые авторы скрипта и многих книг по PHP5!
Но меня всё же интересует вопрос, почему программа не работает. Прведён полный текст с Вашими исправлениями.

   
 
 автор: Lalita Madhava   (15.02.2006 в 02:16)   письмо автору
 
   для: Yuri   (12.02.2006 в 03:25)
 

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

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title>Отправка сообщений с сайта</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251">
</head>

<body>
<H3> <center><font color=#1E90FF>Отправка сообщения с вложением</font></H3>
<center>
<table width=1 border=0>
<form action="simple_mail.php" enctype="multipart/form-data" method="post">
<input name="mail_to" type="hidden" value="igvp@list.ru">
<tr>
<td width=50% align="left">Тема сообщения:</td>
<td align=right><input type="text" name="mail_subject" maxlength=32></td>
</tr>

<tr>
<td width=50% align="left">Имя</td>
<td align=right><input type="text" name="name" maxlength=84 >
</td>
</tr>
<tr>
<td width=50% align="left">Фамилия</td>
<td align=right><input type="text" name="lastname" maxlength=84 >
</td>
</tr>
<tr>
<td align="left">Ваш E-mail:<br>
</td>
<td align="right"><input type="text" name="email"></td>
</tr>
<tr>
<td align="left">Город</td>
<td align="right"><input type="text" name="city" maxlength=32></td>
</tr>
<tr>
<td width=50% align="left">Улица</td>
<td align=right><input type="text" name="street" maxlength=84 >
</td>
</tr>
<tr>
<td width=50% align="left">Дом</td>
<td align=right><input type="text" name="house" maxlength=84 >
</td>
</tr>
<tr>
<td colspan=2 align="left" valign="top"><br>
Сообщение:
<br>
<textarea cols=60 rows=8 name="mail_msg">
</textarea></td>
</tr>
<tr>
<td width=50%>Photo:</td>
<td align=right><input type="file" name="mail_file" maxlength=64></td>

</tr>
<tr>
<td colspan=2><input name="submit" type=submit value="Отправить">
</td>
</tr>
</form>
</table>
</center>

</body>
</html>

   
 
 автор: Yuri   (12.02.2006 в 03:25)   письмо автору
 
   для: Lalita Madhava   (11.02.2006 в 06:17)
 

Да. Определение переменных

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Hello!</title>
</head>

<body>

<?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'];
$mail_to $_POST['mail_to'];
//--------Ваши переменные переданные из формы--------
$name=$_POST['name'];
$lastname=$_POST['lastname'];
$email=$_POST['email'];
$city=$_POST['city'];
$street=$_POST['street'];
$house=$_POST['house'];

// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to$thm$msg);
else 
send_mail($mail_to$thm$msg$picture);

function 
send_mail($to$thm$html$path)
{
//----Начинаем прикручивать---------
$html.="\n\r".$name."\n\r";
$html.=$lastname."\n\r";
$html.=$email."\n\r";
$html.=$city."\n\r";
$html.=$street."\n\r";
$html.=$house."\n\r";
//---------готово--------------
$fp fopen($path,"r");
if (!
$fp)
{
print 
"Файл $path не может быть прочитан";
exit();
}
$file fread($fpfilesize($path));
fclose($fp);

$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 "--$boundary\n";
$message_part .= "Content-Type: application/octet-stream\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 .= $message_part."--$boundary--\n";

if(!
mail($to$thm$multipart$headers))
{
echo 
"К сожалению, письмо не отправлено";
exit();
}
}


?>



</body>

</html>

   
 
 автор: Lalita Madhava   (11.02.2006 в 06:17)   письмо автору
 
   для: Yuri   (10.02.2006 в 02:31)
 

Скрипт выглядит так:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
<title>Hello!</title>
</head>

<body>

<?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'];
$mail_to = $_POST['mail_to'];
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);

function send_mail($to, $thm, $html, $path)
{
//----Начинаем прикручивать---------
$html.="\n\r".$name."\n\r";
$html.=$lastname."\n\r";
$html.=$email."\n\r";
$html.=$city."\n\r";
$html.=$street."\n\r";
$html.=$house."\n\r";
//---------готово--------------
$fp = fopen($path,"r");
if (!$fp)
{
print "Файл $path не может быть прочитан";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);

$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 = "--$boundary\n";
$message_part .= "Content-Type: application/octet-stream\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 .= $message_part."--$boundary--\n";

if(!mail($to, $thm, $multipart, $headers))
{
echo "К сожалению, письмо не отправлено";
exit();
}
}


?>



</body>

</html>

Но ничего не изменилось. По прежнему передаётся только набор $mail_to, $subject, $msg. Может что-то пропущено у меня?

   
 
 автор: Yuri   (10.02.2006 в 02:31)   письмо автору
 
   для: Lalita Madhava   (10.02.2006 в 01:39)
 

Функция mail() может передать только те парамеры, которые может.
А Ваши аргументы можно прикрутить к параметру $html в начале объявления функции send_mail().

function send_mail($to, $thm, $html, $path) 

//----Начинаем прикручивать---------
$html.="\n\r".$name."\n\r";
$html.=$lastname."\n\r";
$html.=$email."\n\r";
$html.=$city."\n\r";
$html.=$street."\n\r";
$html.=$house."\n\r";
//---------готово--------------
$fp = fopen($path,"r"); 
if (!$fp) 

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

$file = fread($fp, filesize($path)); 
fclose($fp); 

$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 = "--$boundary\n"; 
$message_part .= "Content-Type: application/octet-stream\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 .= $message_part."--$boundary--\n"; 

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

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

}

   
 
 автор: Lalita Madhava   (10.02.2006 в 01:39)   письмо автору
 
   для: cheops   (09.02.2006 в 14:09)
 

Я просто приведу пример скрипта, который приведён на сайте, в который нужно добавить несколько переменных - $name, $lastname, $email, $city, 4strit, $haus :

HTML-форма index.php

<HTML>
<HEAD>
<TITLE>Отправка сообщения с вложением</TITLE>
</HEAD>
<BODY>
<H3> <center><font color=#1E90FF>Отправка сообщения с вложением</font></H3>
<center>
<table width=1 border=0>
<form action=simple_mail.php enctype='multipart/form-data' method=post>

<tr><td width=50%>To:</td><td align=right><input type=text name=mail_to maxlength=32></td></tr>
<tr><td width=50%>Subject:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr>
<tr><td colspan=2>Сообщение:<br><textarea cols=50 rows=8 name=mail_msg></textarea></td>
<tr><td width=50%>Photo:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr>
</tr><tr><td colspan=2><input type=submit value='Отправить'></td></tr>
</form>
</table>
</center>
</BODY>
</HTML>


Обработчик simple_mail.php HTML-формы index.php может выглядеть следующим образом

Обработчик simple_mail.php


<?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'];
$mail_to = $_POST['mail_to'];
// Отправляем почтовое сообщение
if(empty($picture)) mail($mail_to, $thm, $msg);
else send_mail($mail_to, $thm, $msg, $picture);
// Вспомогательная функция для отправки почтового сообщения с вложением
function send_mail($to, $thm, $html, $path)
{
$fp = fopen($path,"r");
if (!$fp)
{
print "Файл $path не может быть прочитан";
exit();
}
$file = fread($fp, filesize($path));
fclose($fp);

$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 = "--$boundary\n";
$message_part .= "Content-Type: application/octet-stream\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 .= $message_part."--$boundary--\n";

if(!mail($to, $thm, $multipart, $headers))
{
echo "К сожалению, письмо не отправлено";
exit();
}
}
?>

   
 
 автор: cheops   (09.02.2006 в 14:09)   письмо автору
 
   для: Lalita Madhava   (09.02.2006 в 06:48)
 

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

   
 
 автор: Lalita Madhava   (09.02.2006 в 06:48)   письмо автору
 
 

Большая просьба к автору, или к тем кто работал со скриптом отправки сообщений с сайта с вложением, представленных на Вашем сайте в разделе "Примеры PHP скриптов". Подскажите, пожалуйста, почему у меня не получается передать любое число аргументов? Скрипт работает кажется хорошо, но при добавлении новых полей ограничивается только четырьмя параметрами: to, subject, name, msg. Lalita.

   

Сообщения:  [1-10] 

Форум разработан IT-студией SoftTime
Rambler's Top100
вверх

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