Урок 6: Отправка электронной почты с помощью веб-формы
Пересылка динамических значений формы
Знание действий, описанных в "Динамические веб-сайты" и "Перемещение данных между страницами" , позволяет завершить упражнение, не следуя тем полезным сведениям, которые приведены в этом разделе. Рекомендую так и сделать, но если возникают проблемы или тупиковые ситуации, лучше подстраховаться и внимательно прочесть представленные здесь материалы. После этого можно перейти к последнему разделу "Проверка правильности заполнения формы".
Вначале мне хотелось бы отметить всю сложность того, что предстоит сделать. В предыдущих уроках было рассказано о том, как получать и отправлять данные, используя различные способы –файлы cookie, формы, строки запроса и т.д. Говорилось и о том, как отображать динамический текст при помощи функций Response.Write() (ASP), <cfoutput> (ColdFusion) и echo (PHP). В этом уроке говорилось об объектах и, частично, о том, как объекты применяются серверной моделью для отправки электронного сообщения по протоколу SMTP. Сами по себе, пересылка данных между страницами и почтовые объекты никак не взаимодействуют.>
Но в последнем задании урока эти две несопоставимые вещи будут использованы вместе для создания особого механизма, не встроенного в ASP или ColdFusion. Создаваемое приложение является результатом сочетания различных инструментов и технологий (HTML, HTTP-запросов, а также объектов ASP, ColdFusion и PHP, отвечающих за передачу данных по каналу связи). В определенной степени, такой симбиоз является моделью всего процесса разработки динамичных веб-сайтов, – различные объекты и приемы употребляются совместно, чтобы пользователь мог свободно использовать инструменты для передачи информации и общения.
-
Откройте файл messageSent.asp в режиме Code (Код).
Режим Design (Дизайн) здесь бесполезен, поскольку код, который следует модифицировать, никак не отражается на странице.
-
Найдите электронный адрес отправителя в коде сообщения и замените его соответствующей переменной формы, как показано ниже.
При использовании ASP следует заменить электронный адрес на следующий код: Request.Form("emailAddress").
В случае применения ColdFusion целесообразно заменить код from="yourname@yourserver.com" кодом from="#form.emailAddress#".
Как упоминалось ранее, в PHP не существует простого и понятного способа указать отправителя. В любом случае для PHP указывать отправителя не обязательно, – так что этот шаг можно пропустить. Тем не менее, способы указать отправителя существуют и зависят от применяемого сервера. Чтобы узнать их, следует связаться с хостинг-провайдером.
Теперь в строке From вместо одного и того же электронного адреса будет указываться значение, указанное посетителем в форме.
-
Замените содержимое строки с указанием темы – subject и текст в теле сообщения – body на значения соответствующих переменных формы.
Поскольку в форме нет поля для ввода электронного адреса получателя и, кроме того, сообщение для тестирования должно приходить на ваш адрес, следует оставить адрес получателя, указанный прежде в коде. В итоге, код должен выглядеть следующим образом.
Для ASP:
<% theSchema=http://schemas.microsoft.com/cdo/configuration/ Set cdoConfig=server.CreateObject("CDO.Configuration") cdoConfig.Fields.Item(theSchema & "sendusing") = 2 cdoConfig.Fields.Item(theSchema & "smtpserver") = "your.SMTP.server.com" cdoConfig.Fields.Update set cdoMessage=Server.CreateObject("CDO.Message") cdoMessage.Configuration=cdoConfig cdoMessage.From=Request.Form("emailAddress") cdoMessage.To="yourname@yourserver.com" cdoMessage.Subject=Request.Form("subject") cdoMessage.TextBody=Request.Form("body") cdoMessage.Send Set cdoMessage=Nothing Set cdoConfig=Nothing %>
Для ColdFusion:
<cfmail from="#form.emailAddress#" to="yourname@yourserver.com" fisubject="#form.subject#"> #form.body# </cfmail>
Для PHP:
<? mail('yourname@yourserver.com', $_POST['subject'], $_POST['body']); ?>
-
Сохраните страницу, загрузите ее на сервер и протестируйте работу приложения. Для этого заполните форму, а затем нажмите кнопку Submit и проверьте электронную корреспонденцию.
Если вместо указанной в форме темы сообщения отображается тема form.subject или вместо введенного текста отображается текст form.body, то это означает, что вокруг динамических переменных не удалены кавычки (ASP и PHP) или не добавлены знаки # # (ColdFusion).