Пользователь

Добро пожаловать,

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

Меню сайта




Ваше мнение
Какой язык программирования вы используете ?

ASP
Delphi
C/C++
Basic
PHP
Pascal
Java
Другой


Результаты
Другие опросы

Всего голосов: 1968
Комментарии: 10


Наши партнеры



Статистика




Programming books  Download software  Documentation  Scripts  Content Managment Systems(CMS)  Templates  Icon Sets  Articles  Contacts  Voting  Site Search




Статьи и обзоры



Как отправить письмо через PHP

Речь пойдет о новой версии самого популярного в настоящее время языка написания сценариев для сервера - РНР 5. Этот язык позволяет разрабатывать высокопроизводительные Web-сайты любого масштаба и любой категории сложности. Рассматриваются такие вопросы, как синтаксические конструкции языка, объектно-ориентированное программирование на РНР, работа с базами данных и графическими изображениями, а также построение WAP-содержимого. Большое внимание уделяется эффективным решениям типовых практических задач на PHP, среди которых аутентификация посетителей, шифрование данных, использование сеансов, обработка ошибок, работа с электронной почтой. Как отправить письмо через 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 или пустоту.

    Код:

    PHP - Код
    $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>



    В противном случае, т.е. если была нажата кнопка, идет обработка формы и отправка письма
    Код:

    PHP - Код
    }
    else
    {



    Далее идет проверка на корректность заполнения поля "E-mail". Любители ругулярных выражений эту проверку поймут. Для остальных немного поясню:
    Подразумевается, что e-mail должен быть такого вида:
    слово@слово.слово
    При этом слово может состоять из всех букв латинского алфавита и цифр и точка может быть не одна. (например слово@слово.слово.слово)
    [a-z,0-9] - означает "любая буква латинского алфавита или цифра"
    + - означает, что [a-z,0-9] может встречаться 1 или более раз.

    Если введен неправильный e-mail, то в переменную $error записывается ругательное сообщение.
    Код:
    PHP - Код
    if(!preg_match("/^([a-z,0-9])+@([a-z,0-9])+(.([a-z,0-9])+)+$/"$mailfrom))
        {
        
    $error "Не верно заполнено поле: <b>E-mail</b><br>";
        }



    Если поле "Вопрос" не заполнили, то к переменно $error добавляем еше одно ругательство:
    Код:
    PHP - Код
    if (empty($question))
        {
            
    $error .= "Не заполнено поле: <b>Ваш вопрос</b><br>
    "
    ;
        }



    Если переменная $error не пустая, то мы ее выводим на экран и немедленно прекращаем дальнейшую обработку с помощью exit
    Код:
    PHP - Код
    if ($error)
        {
            echo 
    $error;
            echo 
    "<br><a href="Java Scripthistory.go(-1)" class="text">Вернуться назад</a>";
            exit;
        }



    Ну а если таки $error осталась пустой и exit не сработал, то можно приступать к отправке письма, т.е. главной цели всего этого мероприятия...
    Сформируем тему и тело сообщения:
    PHP - Код
    $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, указанный в начале файла.
    Код:
    PHP - Код
    $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());



    Ну и самое приятное... Если письмо успешно отправлено, то выводим благодарственную надпись и предлагаем вернуться..
    Код:
    PHP - Код
    if ($sucess)
        {
            echo 
    "Спасибо. Ваш вопрос отправлен.<br><br>";
            echo 
    "<a href="Java Scripthistory.go(-1)" class="text">Вернуться назад</a>";
        }



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

    </body>
    </html>



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



  • Нет комментариев. Почему бы Вам не оставить свой?
    Вы не можете отправить комментарий анонимно, пожалуйста войдите или зарегистрируйтесь.
    Внимание! Если у вас не получилось найти нужную информацию, используйте рубрикатор или воспользуйтесь поиском


    .



    Статьи и обзоры PHP Как отправить письмо через PHP Как отправить письмо через используя формы как при этом устранить возникающие проблемы кодировкой Рассмотрим на простом примере вопрос сайте нас будет поля для ввода Ваше имя E-mail Вопрос Причем & quot имя& не является обязательным параметром Для простоты удобства разместим форму код прогараммы одном файле Важно указать кодировку страницы windows-1251 чтобы далее возникало проблем перекодированием из ниже