|
автор: ВЛ (18.08.2005 в 09:51) |
|
| У вас есть пример скрипта отправки письма с вложением - http://softtime.ru/scripts/mailattach.php . Меня интересует, безопасный ли такой скрипт? Файл сначала на сервер попадает, а если это файл php будет? Как разрешить закачивать только рисунки и файлы типа zip ? | |
|
|
|
|
|
|
|
для: ВЛ
(18.08.2005 в 09:51)
| | Да такая защита не реализована, это лишь демонстрационный скрипт, который показывает основную идею и не по возможности не перегружен деталями. Для защиты от такой загрузки следует проверить тип загружаемого файла при помощи конструкции
<?php
if($_FILES['mail_file']['type'] != 'image/pjpeg' || $_FILES['mail_file']['type'] != 'image/gif')
{
exit("Недопустимый формат файла");
}
?>
|
А после отправки письма файл вообще лучше уничтожить от греха, как во временной директории, так и в директории Web-приложения.
<?php
unlink($picture);
unlink($_FILES['mail_file']['tmp_name']);
?>
|
| |
|
|
|
|
автор: ВЛ (18.08.2005 в 12:44) |
|
|
для: cheops
(18.08.2005 в 12:34)
| | Я давно хочу сделать для своего сайта раздел загрузки файлов на сайт с возможностью его описания. Меня устраивает, если это будет в виде письма приходить мне на почтовый ящик, нужно, чтобы поля формы были: Автор файла, название, описание и сам файл. Файлы должны быть в форматах только zip, jpg, gif. Как можно сделать такой скрипт? Я на других сайтах видел такие разделы загрузки. | |
|
|
|
|
|
|
|
для: ВЛ
(18.08.2005 в 12:44)
| | Тогда, если расширений много и могут появляться новые лучше проверять файлы по расширению
<?php
// Извлекаем из имени файла расширение
$ext = strrchr($_FILES['mail_file']['name'], ".");
// Разрешаем загружать файлы только определённого форматм
$extentions = array(".jpg", ".gif", ".zip");
// Проверяем, обладает ли файл, зарегистрированным расширением
if(!in_array($ext, $extentions)) $ext("Недопустимый формат файла");
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(18.08.2005 в 12:34)
| | Прошу помощи знатоков, как правильно описать заголовок "From: ", если:
в html форму добавляем поле:
<tr><td width=50%>Ваш e-mail:</td><td align=right><input type=text name=from maxlength=32></td></tr>
|
Я добавил в Обработчик simple_mail.php:
$_POST['from'] = htmlspecialchars(stripslashes($_POST['from']));
$from = $_POST['from'];
$headers .= "From: $from\nReply-To: $from\n";
|
но письмо вообще не приходит! Если же я убираю переменную в заголовке:
$headers .= "From: TEXTa\nReply-To:TEXTb\n";
|
то все ok, но без нужного мне e-mail'a... :(
Дополнительно размещаю весь код ниже, там есть моя версия доработки:
index.php
<HTML>
<HEAD>
<TITLE>Отправить письмо</TITLE>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251
</head>
</HEAD>
<BODY>
<p> </p>
<center>
<table width=1 border=0>
<form action=simple_mail.php enctype='multipart/form-data' method=post>
<tr><td width=50%>Ваш e-mail:</td><td align=right><input type=text name=from maxlength=32></td></tr>
<tr><td width=50%>Тема:</td><td align=right><input type=text name=mail_subject maxlength=64></td></tr>
<tr><td colspan=2>Сообщение:<br><textarea cols=60 rows=8 name=mail_msg></textarea></td>
<tr><td width=50%>Фото1:</td><td align=right><input type=file name=mail_file maxlength=64></td></tr>
<tr><td width=50%>Фото2:</td><td align=right><input type=file name=mail_fileb maxlength=64></td></tr>
<tr><td width=50%>Фото3:</td><td align=right><input type=file name=mail_filec maxlength=64></td></tr>
<tr><td width=50%>Фото4:</td><td align=right><input type=file name=mail_filed maxlength=64></td></tr>
</tr><tr>
<td colspan=2><input name="submit" type=submit value='Отправить'></td>
</tr>
</form>
</table>
</center>
</BODY>
</HTML>
|
simple_mail.php:
<?php
if(empty($_POST['from'])) exit("Надо было ввести правильный e-mail");
// проверяем правильности заполнения с помощью регулярного выражения
if (!preg_match("/^[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}$/i", $_POST['from'])) exit("Надо было ввести правильный e-mail");
$mail_to = "supertolyan@mail.ru"; // e-mail
$endmsg = "Спасибо, Ваше сообщение было отправлено!";
$_POST['from'] = htmlspecialchars(stripslashes($_POST['from']));
$_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'];
$from = $_POST['from'];
// Отправляем почтовое сообщение
if(empty($picture))
{
mail($mail_to, $thm, $msg);
echo "Сообщение отправлено. <br><br>";
}
else
{
send_mail($mail_to, $thm, $msg, $picture);
echo "11 <br><br>";
}
///////////////2
$picture = "";
if (!empty($_FILES['mail_fileb']['tmp_name']))
{
// Закачиваем файл
$path = $_FILES['mail_fileb']['name'];
if (copy($_FILES['mail_fileb']['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);
send_mail($mail_to, $thm, $msg, $picture);
echo "22 <br><br>";
}
else exit;
///////////////
////////////////3
$picture = "";
if (!empty($_FILES['mail_filec']['tmp_name']))
{
// Закачиваем файл
$path = $_FILES['mail_filec']['name'];
if (copy($_FILES['mail_filec']['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);
send_mail($mail_to, $thm, $msg, $picture);
echo "33 <br><br>";
}
else exit;
/////////////
/////////////4
$picture = "";
if (!empty($_FILES['mail_filed']['tmp_name']))
{
// Закачиваем файл
$path = $_FILES['mail_filed']['name'];
if (copy($_FILES['mail_filed']['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);
send_mail($mail_to, $thm, $msg, $picture);
echo "44 <br><br>";
}
else exit;
///////////////
// Вспомогательная функция для отправки почтового сообщения с вложением
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 .= "From: $from\nReply-To: $from\n";
// $headers .= "From: $mail_to\nReply-To: $mail_to\n"; //////так переменная тоже не работает :(
$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();
}
}
?>
|
| |
|
|
|
|
|
|
|
для: Anatoly
(30.01.2006 в 09:04)
| | А выведите строку с $from в окно браузера - что она из себя представляет?
PS Большие листинги лучше прикреплять к сообщению в виде файла. | |
|
|
|
|
|
|
|
для: cheops
(30.01.2006 в 13:54)
| |
send_mail($mail_to, $thm, $msg, $picture);
echo "11 <br><br>";
echo "$from <br><br>";
|
а вот так выводит то что ввели в поле e-mail......:(
в Header не идет:
ПИСЬМО ПРИХОДИТ С ПУСТЫМ "from":
писал и по другому
$headers .= "From: $from<$from>\n";
|
Не подхватывает почему-то........ | |
|
|
|