Отправка электронной почты

Использование РНР для отправки содержимого формы на определенный адрес электронной почты настолько простое дело, что удивительно, почему люди не делают этого каждый день. В этом методическом пособии вы узнаете, как с помощью РНР выполнить следующие действия:

  • создать и отправить простую форму обратной связи;
  • использовать переменную $PHP_SELF для создания формы обратной связи с пользовательскими сообщениями об ошибках.
  • Дополнительные настройки РНР для пользователей Windows

    ЕСЛИ вы используете РНР4 под управление операционной системы Windows, обратите внимание на следующие строки в вашем файле php.ini:

    [mail function]
    SMTP = ;for Win32 only
    sendmail_from = ;for Win32 only

    Вам необходимо изменить две последние строки для того, чтобы функция mail () работала правильно. Для этого выполните следующие действия:

  • Откройте файл php.ini, расположенный в рабочей папке РНР4 по адресу C:\WebServers\usr\local\apache, с помощью любого текстового редактора, например, Блокнот (Notepad) или HomeSite.
  • Для значения SMTP используйте localhost, или имя внешнего почтового сервера, который использует ваша почтовая программа.
  • Для значения sendmail_from укажите свой адрес электронной почты.
  • Например, файл php.ini автора в секции [mail function] содержит следующие строки:

    [mail function]
    SMTP = localhost
    sendmail_from = anatol_m@scit2001.ru
     
  • Сохраните измененный файл.
  • Создание простой формы обратной связи

    Простая форма обратной связи содержит поля ввода для имени пользователя, адреса его электронной почты и текстовой области для сообщения. В этом разделе вы создадите два файла: один - для формы обратной связи, другой - для сценария РНР, который обработает форму, пошлет почтовое сообщение и вернет ответ браузеру.

    Создание формы обратной связи

  • Создайте с помощью текстового редактора новый файл.
  • Введите следующий HTML-код:
  • Начните создание формы, указав в качестве метода post, а в качестве действия - сценарий send_simpleform.php:
  • Создайте поле ввода для имени пользователя с подписью Ваше имя:
  • Создайте поле ввода для адреса электронной почты пользователя с подписью Ваш E-Mail адрес:
  • Создайте текстовую область для ввода сообщения с подписью Сообщение:
  • Для создания кнопки для пересылки формы введите код:
  • Завершите создание формы и HTML-документа, введя текст:
  • Сохраните созданный файл с именем simple_form.html в папке для документов вашего Web-сервера.
  • Запустите свой Web-браузер, в поле Адрес: введите:
  • http://localhost/simple_form.html

    и нажмите клавишу Enter.
    В рабочее окно браузера будет загружена созданная вами форма обратной связи (рис. 4.1).

    Рис. 4.1. Рабочее окно браузера с загруженной формой обратной связи.

    Создание сценария для обработки формы

    Теперь вы создадите сценарий, который будет иметь дело с тремя переменными: $sender_name, $sender_email и $message.

    В связи с тем, что параметр ACTION в созданной форме simple_form.html имеет значение send_simpleform.php, вы должны дать это же имя своему сценарию. Цель сценария - получить текст в переменных $sender_name, $sender_email и $message, сформировать и отправить почтовое сообщение, и отобразить подтверждение в Web-браузере.

  • Создайте с помощью текстового редактора новый файл.
  • Начните создание строки сообщения электронной почты:
  • Чтобы добавить к строке сообщения строку с именем отправителя, введите текст:
  • Следующие несколько шагов будут продолжать формирование строки сообщения, объединяя маленькие строки в одну длинную строку сообщения. Для объединения строк используется оператор (.=).

  • Чтобы добавить к строке сообщения строку с адресом отправителя, введите текст:
  • Чтобы добавить к строке сообщения текст сообщения, введите текст:
  • Последняя строка содержит два признака новой строки (\n\n), чтобы добавить пустую строку в конце.

  • Чтобы создать переменную, содержащую адрес получателя сообщения, введите текст, заменив ваше_имя@ваш_email.com своим собственным адресом электронной почты, например:
  • Чтобы создать переменную, содержащую тему сообщения, введите текст:
  • Чтобы создать переменную, содержащую дополнительные заголовки, введите текст:
  • Добавьте к переменной $mailheaders информацию об отправителе, введите текст:
  • Чтобы добавить функцию отправки сообщения, введите текст:
  • Завершите ввод блока PHP строкой:
  • Набранный вами текст сценария должен выглядеть так, как он показан в листинге приведённом на pис. 4.2.

    Рис. 4.2. Листинг сценария.

    Сохраните сценарий с именем send_simpleform.php.

    Создание уведомления для браузера

    Хотя созданный сценарий РНР будет отправлять почтовое сообщение, необходимо сгенерировать вернуть какое-нибудь сообщение пользователю на экран, чтобы он знал, что его сообщение, которое он отправил из формы, было принято. Иначе он будет продолжать нажимать кнопку Послать форму, не подозревая, что сообщение уже отправлено.

    Продолжим ввод текста в созданный в предыдущем шаге файл.

  • Начните HTML-код:
  • Добавьте информацию для пользователя о том, что было сделано:
  • Добавьте надпись Ваше имя:
  • Для вывода на экран имени пользователя из формы, введите команду:
  • Добавьте надпись Ваш E-mail адрес:
  • Для вывода на экран адреса электронной почты пользователя, введите команду:
  • Добавьте надпись Сообщение:
  • Для вывода на экран введенного сообщения пользователя, введите команду:
  • Добавьте следующие строки, чтобы завершить создание HTML-документа:
  • Сохраните созданный файл с именем send_simpleform.php в папке для документов вашего сервера.
  • Созданный вами сценарий send_simpleform.php должен выглядеть так, как он показан в листинге приведённом на pис. 4.3. за исключением вашего электронного адреса, а не моего.

  • Рис. 4.3. РНР-сценарий для формирования и отправки сообщения электронной почты и создания уведомления для браузера.

    Заполнение созданной формы и получение результата

    Вы создали форму и связанный с ней сценарий, теперь проверьте все это в работе.

  • Запустите свой Web-браузер, в поле Адрес введите:
  • http://localhost/simple_form.html

    и нажмите клавишу Enter. В рабочее окно браузера будет загружена созданная вами ранее форма обратной связи (pис. 4.1).

  • Введите свое имя в поле ввода Ваше имя:.
  • Введите свой адрес электронной почты в поле ввода Ваш E-mail адрес:.
  • Введите в поле ввода Сообщение: текст: РНР - это здорово!
  • Подключитесь к Интернету.
  • Нажмите кнопку Послать форму. Вид окна браузера изменится, как показано на следующей странице на рис. 4.4.

    Рис. 4.4. Подтверждение отправки сообщения.

  • Запустите вашу почтовую программу и проверьте свой почтовый ящик. Вы найдете в нем ожидающее вас сообщение (рис. 4.5).
  • Выравнивание тeкcтa в почтовом сообщении

    Как видно из рис.4.5, текст в строках сообщения не выровнен, и это портит внешний вид письма. Чтобы исправить это и сделать текст сообщения более аккуратным, выполните следующие действия:

  • Откройте файл send_simpleform.php с помощью любого текстового редактора.
  • Вставьте в строке содержащей текст Имя отправителя: два знака табуляции (\t) после фразы Имя отправителя:
  • Вставьте в строке содержащей текст E-Mail адрес отправителя: однин знак табуляции (\t):
  • Вставьте в строке содержащей текст Сообщение: три знака табуляции (\t).
  • Сохраните сделанные изменения. Фрагмент изменённой части файла send_simpleform.php приведён в листинге на рис. 4.5.
    Рис. 4.5. Фрагмент изменённой части файла send_simpleform.php

    Запустите браузер, в поле Адрес: введите:

    http://localhost/simple_form.html

    и нажмите клавишу Enter, в рабочее окно браузера будет загружена созданная вами ранее и уже знакомая форма обратной связи (pис. 4.6).

    Рис. 4.6. Формa обратной связи.

  • Введите свое имя в поле ввода Ваше имя:.
  • Введите свой E-mail адрес в поле ввода Ваш E-mail адрес:.
  • Введите в поле ввода Сообщение: текст
  • РНР - это здорово!

  • Подключитесь к Интернету.
  • Нажмите кнопку Послать форму. Вид окна браузера изменится, как показано на рис. 4.7.
  • Рис. 4.7. Подтверждение отправки сообщения.

    Запустите вашу почтовую программу и проверьте свой почтовый ящик. Вы найдете в нем ожидающее вас сообщение (рис. 4.8).

    Рис. 4.8. Письмо с выровненным текстом сообщения.

    Теперь текст сообщения стал более аккуратным.

    Для того чтобы улучшить сценарий send_simpleform.php, проверим, имеют ли какие-либо значения переменные $sender_name, $sender_email и $message, перед тем как выполнить отправку письма. Для этого выполните следующие действия:

  • Откройте файл send_simpleform.php с помощью любого текстового редактора.
  • Добавьте после первого тега РНР (<?) следующий код:
  • Сохраните сделанные изменения.
  • Далее вы создадите сценарий, в котором будеnт генерироваться сообщение об ошибке, если поле ввода в форме не заполнено. Кроме этого, вы объедините двухступенчатый процесс отправки сообщения в одном сценарии.

    Форма обратной связи с сообщениями об ошибках.

    Итак, Вы создали два отдельных файла. Один из них содержит форму, а другой - связанный с ней сценарий. Теперь Вы узнаете как, используя переменную $PHP_SELF для обработки формы, создать один единственный файл, который объединяет в себе и форму и сценарий. Вы также узнаете, как создавать сообщение об ошибке, когда хотя бы одно из полей ввода формы не заполнено.

    Создание первоначального сценария

  • Создайте с помощью текстового редактора новый файл.
  • Введите начало HTML-документа:
  • Начните блок РНР.
  • Создайте переменную с именем $form_block, в которой будет храниться вся форма.
  • Начните формирование формы в переменной $form_block, указав в качестве метода post, а в качестве действия — переменную $PHP_SELF:
  • Поскольку необходимо поместить длинную строку в переменную, велика вероятность того, что в строке встретится одна или несколько кавычек. Не забывайте маскировать все внутренние знаки кавычек с помощью символа обратной косой черты (\).

  • Создайте поле ввода для имени пользователя с надписью Ваше имя:
  • Создайте поле ввода для адреса электронной почты пользователя с надписью Ваш E-Mail адрес:
  • Создайте текстовую область для ввода сообщения с надписью Сообщение:
  • Для создания кнопки с надписью Послать форму введите код:
  • Чтобы завершить форму и закончить операцию присвоения, введите текст:
  • Завершите PHP-блок и создание HTML-документа:
  • Сохраните созданный файл с именем allinone_form.php в папке для документов вашего Web-сервера.
  • Полный, без комментариев, листинг файла allinone_form.php приведён на рис. 4.9.
    Рис. 4.9. Листинг файла allinone_form.php.

    Если вы попытаетесь загрузить файл allinone_form.php в ваш Web-браузер, то ничего не увидите, кроме заголовка окна Форма уведомления все-в-одном. У вас может возникнуть вопрос: "Зачем были необходимы все введенные HTML-строки, присвоенные переменной $form_block?" Далее Вы добавите к созданному сценарию команды, которые отображают некоторые фрагменты кода в зависимости от определенных действий. Строка в переменной $form_block является одним из таких фрагментов.

    Добавление npoвepкu ошибок в сценарий.

    Мы планируем использовать глобальную переменную $PHP_SELF, которая имеет значение имени текущего сценария. В нашем случае переменная $PHP_SELF будет иметь значение allinone_form.php. Когда вы используете переменную $PHP_SELF в качестве действия (ACTION), вы как бы говорите: "Когда будет нажата кнопка пересылки формы, нужно перезагрузить этот сценарий и произвести некоторые действия" вместо того, чтобы сказать: "Когда будет нажата кнопка пересылки формы, нужно найти другой сценарий и произвести некоторые действия".

    Пока имеется только оболочка сценария, поэтому следует подумать о том, какие действия должен выполнять этот сценарий:

  • Отобразить форму;
  • Переслать форму;
  • Проверить ошибки;
  • Вывести сообщения об ошибках без отправки сообщения;
  • Отправить форму, если не было найдено ошибок.
  • Уточнив задачи, стоящие перед сценарием, можно продолжить его создание.

  • Откройте сценарий allinone_form.php с помощью любого текстового редактора.
  • Внутри переменной $form_block, перед HTML-кодом, формирующим кнопку для пересылки формы, введите строку:
  • Эта строка задает скрытую переменную с именем $ор, которой присваивается значение ds. Обозначение переменной op - сокращение от operator (оператор), а значение ds - do something (сделать кое-что). Такие имена выбраны просто потому, что они не зарезервированы ни для каких действий в различных языках программирования. Вы можете назвать их так, как вам захочется, лишь бы вы понимали их назначение, о котором будет рассказано далее.

    Переменная $ор будет определена только в том случае, если форма была передана для обработки, т.е. была нажата кнопка Послать форму. Таким образом, если значение переменной $ор не определено, т.е. не равно "ds", то это означает, что пользователь еще не видел форму. А если пользователь не видел форму, то мы должны ее показать.

  • Перед признаком завершения РНР-блока (?>) введите оператор if. .else:
  • Сохраните изменения в файле.
  • Фрагмент листинга измененной вами части файла allinone_form.php должен выглядеть как показано на рис. 4.10


    Рис. 4.10. Фрагмент листинга изменённой части файла allinone_form.php

    В следующих ниже шагах вы произведете дополнительно некоторые изменения в созданном сценарии, чтобы добавить сообщения об ошибках при неправильном заполнении формы пользователем. Если форма была передана, то переменная $ор будет иметь значение "ds", и мы выполним действия уже для этого условия. Мы предполагаем, что все поля формы обязательно должны быть заполнены, поэтому после проверки значения переменной $ор нужно проверить, имеются ли значения во всех полях.

  • Откройте сценарий allinone_form.php с помощью любого текстового редактора
  • Продолжите оператор if. . .else:
  • Добавьте в качестве действия еще один оператор if. . .else, проверяющий переменную $sender_name:
  • Создайте в переменной $name_err сообщение об ошибке при отсутствии значения переменной $sender_name:
  • Создайте переменную $send и присвоим ей значение "nо" (нет):
  • Введите такую же проверку переменной $sender_email:
  • Введите проверку переменной $message:
  • Начните оператор if. . .else, который проверит переменную $send:
  • Введите код, формирующий строку почтового сообщения
  • :

  • Создайте переменную для хранения адреса получателя (замените olga@scit2004.ru на свой адрес электронной почты):
  • Создайте переменную для хранения темы почтового сообщения:
  • Создайте переменную для хранения заголовка почтового сообщения:
  • Добавьте к значению переменной $mailheaders информацию об отправителе:
  • Добавьте функцию mail( ):
  • Добавьте простой оператор, сообщающий пользователю, что сообщение было послано, и завершите блок оператора if:
  • Продолжите оператор if. . .else и определите действия в случае, когда переменная $send примет значение "nо":
  • Введите команды для вывода на экран сообщений об ошибках:
  • Введите команду, которая выведет на экран форму:
  • Закройте текущий оператор if. . .else:
  • Закройте внешний оператор if. . .else:
  • Сохраните файл с изменениями.
  • Пересылка формы и получение результатов

    Вы объединили форму и сценарий ее обработки в одном файле allinone_form.php. Пора проверить их работоспособность.

  • Запустите браузер, в поле Адрес введите:
  • http://localhost/allinone_form.php

    и нажмите клавишу Enter. В рабочее окно браузера будет загружена созданная вами форма (pис. 4.12).

    Рис. 4.12. Рабочее окно браузера с формой все-в-одном.

    Форма на рис. 4.12 содержит текстовые поля Ваше имя: и Ваш E-mail адрес:, предназнаменные для ввода персональной информации, текстовую область Сообщение: - для ввода текста сообщения и кнопку Послать форму.

  • Нажмите кнопку Послать форму, ничего не вводя ни в одно поле ввода.
  • В верхней части формы будут выведены три сообщения об ошибках (рис. 4.13).

    Рис. 4.13. Рабочее окно браузера с тремя сообщениями об ошибках.

  • Введите только свое имя в поле ввода Ваше имя: . Остальные поля ввода оставьте пустыми. Нажмите кнопку Послать форму. В результате будет выведено два сообщения об ошибках (рис. 4.14)
  • Рис. 4.14. Рабочее окно браузера с двумя сообщениями об ошибках.

  • Введите свое имя в поле ввода Ваше имя: .
  • Введите в поле ввода Ваш E-mail адрес: свой E-mail адрес, а поле ввода
  • Сообщение
  • оставьте пустым.
  • Нажмите кнопку Послать форму
  • В верхней части окна браузера будет выведено одно сообщение об одной ошибке (рис. 4.15).

    Рис. 4.15. Рабочее окно браузера с одним сообщением об ошибке.

  • Введите свое имя в поле ввода Ваше имя:.
  • Введите в поле ввода Ваш E-mail адрес: свой E-mail адрес.
  • Введите в поле ввода Сообщение: текст: Сценарий все-в-одном - это очень здорово!
  • Подключитесь к Интернету.
  • Нажмите кнопку Послать форму
  • В рабочем окне браузера появится сообщение об успешной отправке почтового сообщения (рис. 4.16).

    Рис. 4.16. Сообщение об успешной отправке сообщения.

  • Проверьте свой почтовый ящик в Интернете, в нем вы увидите ожидающее вас сообщение.
  • Получите почтовое сообщение, используя свою почтовую программу, и откройте его. Вид полученного сообщения будет похож на тот, который показан на рис. 4.17.
  • Рис. 4.17. Письмо, отправленное с помощью сценария allinone_form.php.

    Сохранение значений в полях формы при oшибкax

    При работе сценария allinone_form.php вы могли заметить, что если была допущена ошибка, то значения, введенные в поля формы, не сохраняются. Это очень просто исправить во фрагменте кода, задающем переменную $form_block. Надо просто добавить параметр VALUE в строки, задающие поля ввода, чтобы хранить в этом параметре предыдущее значение данного поля.

  • Для модификации сценария откройте файл allinone_form.php с помощью любого текстового редактора.
  • Замените строку, определяющую поле ввода Ваше имя: внутри переменной $form_block, следующей строкой:
  • Замените строку, определяющую поле ввода Ваш E-mail адрес: внутри переменной $form_block, следующей строкой:
  • Замените строку, определяющую текстовую область Сообщение: внутри переменной $form_block, следующей строкой:
  • Пpu определении текстовой области TEXTAREA не требуется параметр VALUE. Достаточно вставить значение между начальным и конечным тегом, определяющим область.

  • Сохраните изменения в файле.
  • Запустите браузер, в поле Адрес введите:
  • http://localhost/allinone_form.php

    и нажмите клавишу Enter.

    В рабочее окно браузера будет загружена форма из модернизированного вами файла allinone_form.php (рис. 4.18).

    Рис. 4.18. Рабочее окно браузера с формой все-в-одном.

  • Введите свое имя в поле ввода Ваше имя: . Остальные поля ввода оставьте пустыми. Нажмите кнопку Послать форму, ничего не вводя в остальные поля ввода. В верхней части формы будет выведено два сообщения об ошибке (рис. 4.19).
  • Рис. 4.19. Форма с сообщениями об ошибках и с сохранёнными данными в поле ввода Ваше имя.

    Вы видите, что на этот раз значение в поле ввода Ваше имя: сохранилось!

  • Введите в поле ввода Ваш E-mail адрес: свой адрес электронной почты, поле ввода Сообщение: оставьте пустым.
  • Нажмите кнопку Послать форму. В верхней части формы будет выведено одно сообщение об ошибке (рис. 4.20).
  • Рис. 4.20. Форма с сообщениями об ошибках и с сохранёнными данными в поле ввода Ваше имя: и Ваш адрес:
    .
  • Введите в поле ввода Сообщение: текст:
    Сценарий все-в-одном - это очень здорово!
  • Подключитесь к Интернету.
  • Нажмите кнопку Послать форму. В рабочем окне браузера появится сообщение об успешной отправке почтового сообщения (рис. 4.16)
  • Проверьте свой почтовый ящик в Интернете, в нем вы увидите ожидающее вас сообщение.
  • Получите пoчтовое сообщение, используя свою почтовую программу, и откройте его. Вид полученного сообщения будет похож на тот, который показан на рис. 4.17.

  • Hosted by uCoz