Відправлення листів через PHP

dina, Webscript.ru

Як відправити лист через PHP, використовуючи форми, і як при цьому усунути виникаючі проблеми з кодуванням?

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

Ваше ім'я:

* E-mail:

* Питання:

Причому "Ваше ім'я" не є обов'язковим параметром.
Для простоти і зручності розмістимо форму і код прогарам в одному файлі. Важливо вказати кодування сторінки (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 повинен бути такого виду:
слово@слово.слово
При цьому слово може складатися з усіх букв латинського алфавіту і цифр і точка може бути не одна. (Наприклад слово@слово.слово.слово)
[Az ,0-9] – означає "будь-яка буква латинського алфавіту або цифра"
+ – Означає, що [az ,0-9] може зустрічатися 1 або більше разів.

Якщо ввести неправильний e-mail, то в змінну $ error записується лайливе повідомлення.

if (! preg_match ("/^([ az ,0-9 ])+@([ az ,0-9 ])+(.([ az ,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


Коментарі: $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());

Ну і найприємніше … Якщо лист успішно відправлено, то виводимо подячну напис і пропонуємо повернутися ..

    if ($sucess)
    {echo "Дякую. Ваше питання надіслано. <br> <br>";echo "<a href = \" javascript: history.go (-1) \ " 
class = "text \"> Повернутися назад </ a> ";     }

Стандартний кінець ..

}
?>

</body>
</html>

PS Як напевно зрозумів читач, потрібно виділити і скопіювати всі зелені блоки в один файл по порядку і запустити його на сервері
Весь код є повністю перевіреним і робітникам.

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*