WebMasterok
Главная
Вход
Регистрация
Среда, 08.01.2025, 06:32Приветствую Вас Гость | RSS
Меню сайта

Главная » 2013 » Март » 25 » Как выслать письмо через PHP
09:15
Как выслать письмо через PHP
Как выслать письмо через PHP, используя формы, и как при всем этом убрать возникающие препядствия с кодировкой?

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

Ваше имя:
* E-mail:
* Вопрос:

При этом "Ваше имя" не является неотклонимым параметром.

Для простоты и удобства разместим форму и код прогараммы в одном файле. Принципиально указать шифровку странички (windows-1251), чтоб дальше не появлялось заморочек сперекодированием из win в koi(ниже)

Итак, приступим. Начало документа стандартное:

Код:


    Отправка письма



Дальше идет 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>

Поля, отмеченные (*), неотклонимы для наполнения.

<form 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]
";

}


Если поле "Вопрос" не заполнили, то к переменно $error добавляем еше одно ругательство:

Код:
if (empty($question))

{

$error.= "Не заполнено поле: [b]Ваш вопрос[/b]


";

}



Если переменная $error не пустая, то мы ее выводим на экран и немедля прекращаем последующую обработку при помощи exit

Код:
if ($error)

{

echo $error;

echo "
<a class="text">Вернуться назад</a>";

exit;

}



Ну а если таки $error осталась пустой и exit не сработал, то можно приступать к отправке письма, т.е. главной цели всего этого мероприятия...

Сформируем тему и тело сообщения:

$subject="Вопрос от $mailfrom";

$body="Имя:

$username

E-mail:

$mailfrom


Комменты:

$question";


А сейчас самое главное, чтобы позже можно было прочесть письмо "по-русски":) Функция convert_cyr_string перекодирует строчку из win в koi (w-win, k-koi) Это нужно, т.к. все почтовые клиенты по дефалту принимают письма в koi. А у нас вверху странички стоит charset=windows-1251, потому функция хорошо переводит из win в koi Потом при помощи функции mail отчаливает письмо на $mailto, обозначенный сначала файла.

Код:
$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());</div>



Ну и самое приятное... Если письмо удачно отправлено, то выводим благодарственную надпись и предлагаем вернуться..

<div class="codetitle">Код:</div><div class="code"> if ($sucess)

{

echo "Спасибо. Ваш вопрос выслан.

";

echo "<a class="text">Вернуться назад</a>";

}


Стандартный конец..

Код:
}

?>



P.S. Как наверное сообразил читатель, необходимо выделить и скопировать все зеленоватые блоки в один файл по порядку и запустить его на сервере

Весь код является стопроцентно испытанным и рабочим.
Просмотров: 375 | Добавил: Romik72 | Теги: скрипты | Рейтинг: 0.0/0
Всего комментариев: 0
Имя *:
Email *:
Код *:
Статистика

Онлайн всего: 1
Гостей: 1
Пользователей: 0