Сейчас на сайте:
Пользователей: 0
Отсутствуют.
Роботов: 2
Googlebot, Yandex
Гостей: 73
Всех: 75
ВНИМАНИЕ! Конкурс по программированию!
Проект Programmers.kz и школа hotPen3D2D предлагает Вам курсы по веб-дизайну, веб-программированию и компьютерной графике. Подробности здесь.
Информация к новости
- Просмотров: 1167
- Автор: КазКиберГетик
Отправка писем через PHP
Категория: WEB-программирование » PHP и MySQL » Статьи PHP/MySQL
Отправка писем через PHP
Автор: dinaИсточник: www.webscript.ru
Как отправить письмо через PHP, используя формы, и как при этом устранить возникающие проблемы с кодировкой?
Рассмотрим на простом примере, как отправить вопрос через формы на сайте. У нас будет 3 поля для ввода:
Причем "Ваше имя" не является обязательным параметром.
Для простоты и удобства разместим форму и код прогараммы в одном файле. Важно указать кодировку страницы (windows-1251), чтобы далее не возникало проблем с перекодированием из win в koi (ниже)
Итак, приступим. Начало документа стандартное:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Отправка письма</title> <meta content="text/html;charset=windows-1251" http-equiv="Content-Type"> </head> <body>Далее идет 2 логические части:
1 - вывод формы
2 - обработка формы и отправка письма
Вначале идет вывод формы.
Для удобства в начале определяем e-mail через переменную $mailto, на который будет отсылаться письмо из формы.
Далее мы определяем, была ли нажата кнопка "отправить".
В конце формы имеется кнопка "отправить", она имеет аттрибуты name="ok" и value="отправить". После нажатия на нее переменная $ok будет иметь значение "отправить". Если кнопка не нажата, то переменная не определена.
Таким образом, выражение if (empty($ok)) означает буквально "если кнопка отправить не была нажата". Функция empty() возвращает true, если переменная не определена, содержит 0 или пустоту.
<?
$mailto="name@server.ru";
if (empty($ok))
{
?>
Далее идет вывод формы, если выполнено предыдущее условие if (empty($ok)).Переменная $PHP_SELF означает, что обработку формы производит текущий файл, т.е. тот же, на кот. расположена форма.
<h3>Отправьте вопрос автору сайта</h3> Поля, отмеченные (*), обязательны для заполнения. <br><br> <form action="<?echo $PHP_SELF;?>" method="post"> <table> <tr> <td>Ваше имя:</td> <td> <input type="text" name="username" size="30" maxlength="20"></td> </tr> <tr> <td>* E-mail:</td> <td><input type="text" name="mailfrom" size="30" maxlength="50"></td> </tr> <tr> <td>* Вопрос:</td> <td><textarea cols="50" rows="10" name="question"></textarea></td> </tr> </table> <input type="submit" name="ok" value="отправить"> </form>В противном случае, т.е. если была нажата кнопка, идет обработка формы и отправка письма
<?
}
else
{
Далее идет проверка на корректность заполнения поля "E-mail". Любители ругулярных выражений эту проверку поймут. Для остальных немного поясню:Подразумевается, что e-mail должен быть такого вида:
слово@слово.слово
При этом слово может состоять из всех букв латинского алфавита и цифр и точка может быть не одна. (например слово@слово.слово.слово)
[a-z,0-9] - означает "любая буква латинского алфавита или цифра"
+ - означает, что [a-z,0-9] может встречаться 1 или более раз.
Если введен неправильный e-mail, то в переменную $error записывается ругательное сообщение.
if(!preg_match("/^([a-z,0-9])+@([a-z,0-9])+(.([a-z,0-9])+)+$/", $mailfrom))
{
$error = "Не верно заполнено поле: <b>E-mail</b><br>";
}
Если поле "Вопрос" не заполнили, то к переменно $error добавляем еше одно ругательство:
if (empty($question))
{
$error .= "Не заполнено поле: <b>Ваш вопрос</b><br>
";
}
Если переменная $error не пустая, то мы ее выводим на экран и немедленно прекращаем дальнейшую обработку с помощью exit
if ($error)
{
echo $error;
echo "<br><a href="javascript:history.go(-1)"
class="text">Вернуться назад</a>";
exit;
}
Ну а если таки $error осталась пустой и exit не сработал, то можно приступать к отправке письма, т.е. главной цели всего этого мероприятия...Сформируем тему и тело сообщения:
$subject="Вопрос от $mailfrom"; $body="Имя: $username E-mail: $mailfromА теперь самое главное, чтоб потом можно было прочитать письмо "по-русски" :) Функция convert_cyr_string перекодирует строку из win в koi (w-win, k-koi) Это необходимо, т.к. все почтовые клиенты по дефалту принимают письма в koi. А у нас вверху страницы стоит charset=windows-1251, поэтому функция грамотно переводит из win в koi Затем с помощью функции mail отправляется письмо на $mailto, указанный в начале файла.
Комментарии: $question";
$body=convert_cyr_string (stripslashes($body),w,k); $subject=convert_cyr_string (stripslashes($subject),w,k); $sucess = mail($mailto, $subject, $body,Ну и самое приятное... Если письмо успешно отправлено, то выводим благодарственную надпись и предлагаем вернуться..
"From: $email X-Mailer: PHP/" . phpversion());
if ($sucess)
{
echo "Спасибо. Ваш вопрос отправлен.<br><br>";
echo "<a href="javascript:history.go(-1)"
class="text">Вернуться назад</a>";
}
Стандартный конец..
} ?> </body> </html>P.S. Как наверно понял читатель, нужно выделить и скопировать все зеленые блоки в один файл по порядку и запустить его на сервере
Весь код является полностью проверенным и рабочим.
Вернуться
Комментариев: 0
Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.




