Анимация
JavaScript
|
Главная Библионтека Используйте вариант, который работает лучше и больше вам подходит. Во-втор1х, обратите внимание на то, что адрес, указываемый в поле То:, жестко "зашит" в программе - в виде адреса webmasterSmyhoSt.com. Вам придется изменить этот адрес, поскольку по нему булуг отправлггься сообщения. Причина, по которой адрес получателя не берется из поля формы, совсем проста: не стоит разрешать неизвестным пользователям отправлять сообщения по электронной почте с помощью Web-формы. Если кто-нибудь будег злоупотреблять использованием вашей формы и посылать "направо и налево", скажем, неприличные сообщения, то вас могут обвинить как инициатора сообщений такого рода. Вряд ли вам захотелось бы очутиться в такой ситуации. Если нужно, то, используя только одну Web-форму, можно организовать отправку сообщений по нескольким адресам. Для этого создайте раскрывающийся список получателей или используйте кнопки переключателя: <IIIPDT TYPE=radio NAHE=target Valtie=l СНЕСКЕП>Отдел технической поддерхкн <INPUT TyPE=j:adio NAME=target Valae=2>0irnefl продаж <INPU1! TYPEdio NAME=target Уа1ие=3>11ридячес1сий отдел Затем ограмме используйте следующий программный код: $formtarget=param{target); *targets=( 1=> supportgmyhost.com, 2=> salesimyhoEt.com, 3=> legalNyhost.com); if {exists($targets{$fomtarget})) { $target=$targetsl$formtarget); } else { Starget=webmasteremyhost.com; print $target; Какой бы способ вы ни выбрали, не разрешайте передавать почтовые сообщения из Web-формы по произвольно задаваемому адресу То:. Вместо этого передайте COI-программе какое-нибудь безопасное значение (в данном примере мы использовали число в диапазоне 1-3), а затем интерпретируйте его соответствующим образом. Обратите внимание, как в нашем примере с помощью директивы else обрабатывается некорректное значение (на всякий случай). Контроль адресов электронной почты Возможно, вы заметили, что не пытается установить, достоверен ли адрес, введенный пользователем. На это есть причина: сие невозможно! Такой поворот дел может удивить вас. Одна из "святых заповедей" разработки систем электронной почты в Internet - знать, достоверен ли адрес получателя. На это есть короткая отповедь: это невозможно! О трудностях в решении этого вопроса можно судить, обратившись к рис. 22.1 и 22.2, приведенным в начале данного занятия. С позиции отправителя совсем не виден конец всей цепи доставки сообщения. Она должна полностью передать сообщение второй системе в цепи, которая затем передаст его третьей, и т.д. Задержка между передачами "эстафетной палочки" весьма значительна. И важно то, что инициирующая система не имеет никакого контроля над сообщением после того, как она "сбыла его с рук". Стандартный подход - постараться избавиться от явно неверных адресов, но, к сожалению, нет способа для утверждения, что данный адрес недействителен. Стандарт Internet для адресов электронной почты - RFC 822 - содержит шаблон для стандартных адресов электронной почты. Однако нельзя не отметить, что некоторые совер- шенно корректные с точки зрения стандарта адреса оказываются недействи- тельными, а другие, нарушающие этот стандарт, - вполне действительны. Попытки написать регулярные выражения, чтобы с ними можно было сравнивать адреса электронной почты, ни к чему не привели. Например, выражение /"[\w.-]+\@([\w.-]\.)+\w+S/ выглядит вполне подходяще. Ему даже можно поставить в соответствие такие адреса, как megsomewhere.com. Однако это выражение "забракует" следующие вполне рабочие адреса: *§qz.az clintp!sol2!westwoodedec.net relay%me?host,com "barneysfred"?flintstones.net . Одно регулярное выражение, которое соответствует адресам электронной почты, удовлетворяющим стандарту RFC-822, содержит 4 700 символов - слишком много, чтобы приводить его в этой книге и ожидать от вас готовности его использовать. Причем следует учесть, что оно совпадает далеко не со всеми действующими адресами в Internet. Так что же делать? Единственный способ определить достоверность некоторого адреса электронной почты - послать по этому адресу сообщение и ожидать ответа. Если по каким-то причинам вам понадобится иметь гарантии существования получателя с таким-то адресом, например для отправки ему сообщений в будущем, пошлите ему сообщение с просьбой ответить отправителю. Получив ответ, вы будете знать, что имеете дело с достоверным адресом электронной почты. Резюме На этом занятии вы узнали, как отправлять сообщения электронной почты из Web-страницы. Были рассмотрены две версии функции send mail (), которые можно использовать в Perl-программе для отправки почты. Нри этом вы постигли основы работы электронной почты в Internet и познакомились с базовыми правилами сетевого этикета. Вопросы и ответы Можно ли использовать информацию от броузера для определения адреса электронной почты посетителя? Хотя такая возможность кажется замечательной - с ее помощью мы бы избавились от ошибок ввода адресов электронной почты, - она попросту невозможна. У броузера нет адреса электронной почты пользователя. Значение, возвращаемое функцией remote host модуж CGI, может в действительности не быть адресом, по которому пользователь получает электронную почту. Функция remote iiser (если вы используете безопасные Web-транзакции), скорее всего, не будет содержать полного электронного адреса пользователя. И помните, броузер вполне может быть "недобросовестным" по части информации такого рода, к тому же некоторые дополнительные модули для броузеров Netscape и Internet Explorer поступают именно таким образом. Кроме того, учтите, что пользователь может работать с Web-броузером в библиотеке, дома у приятеля, на работе или в Internet-кафе, поэтому адрес броузера даже удаленно никак не связан с адресом электронной почты пользователя. Можно ерить адрес электронной почт1? Можете попытаться. Например, в большипстве совремеппых адресов содержится символ @ (коммерческого at), и его можно использовать для проверки. Однако адреса на локальном компьютере {например, postmaster, root) не содержат символа S. Я опробовав ограмму отправки электронной поч11 и получил в сообщении строку From nobody...? Ах, да. Программа sendraail регистрирует идентификатор отправителя сообщения. В действительности "отправителем" является сам Web-сервер Web-сервер часто работает со специальным идентификатором пользователя (Ш) - nobody, Шо, httpd или (не дай Бог!) root - и именно этот адрес указывается в заголовке почтового сообщения. Ничего страшного. Если в качестве части заголовка вы обеспечите соответствующую строку From:, то именно эта строка и будет видна на экране у получателя. Как к сообщению электронной почт1 присоединить файл? Вам стоит заглянуть модули, находящиеся в CPAN. Семинар Контрольные вопросы 1 Какое действие выполняет строка Sfoo-Net: :SMTP->new( mailhost)? (Если вы до сих пор не прочитали раздел, "Отправка почты не из системы UNIX", то, возможно, вам стоит сделать это сейчас.) а) вызывает синтаксическую ошибку; б) создает объект, именуемый $foo, который представляет подключение к почтовому SMTP-серверу; в) включает в текущую программу модуль Net: :SHTP 2. Какой из приведенных ниже вариантов не является (потенциально) действительным адресом электронной почты? а) foolbaribazlquux. б) " в) stuff%junk! "Wowzeris" !foo.com!blat. Ответы 1. Правильный ответ - вариант б). Если в качестве ответа вы выбрали пункт а), то вы либо допустили опечатку, либо работаете с версией Perl 4. Вариант в) неверен, поскольку представляет собой описание действия оператора use Het:iSMTP. 2. Сложный вопрос. Все они являются потенциально допустимыми адресами электронной почты. 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 [ 108 ] 109 110 111 112 113 114 115 116 117 118 119 120 121 122 |