![]() |
|
|
|
![]() |
|
создать сайт:три письма на Perl'Те, кто имел дело с Perl, знают, что написание на этом мощном языке программирования скрипта для создания и отправки писем - для начинающего дело достаточно сложное. Мы рассмотрим три варианта таких скриптов Вариант первый Итак, первый вариант такого скрипта, самый простой:
На первый взгляд, ничего сложного. Но давайте присмотримся повнимательнее. Вначале открываем файл sendmail как поток. Другими словами, подготавливаем программу sendmail к приему данных и присваиваем ей handle SENDMAIL. Надеюсь, вы заметили, что в конце строки нет точки с запятой. Она стоит на следующей строке, так как там стоит условие аварийного завершения скрипта в случае ошибки открытия файла. В третьей строке мы передаем в sendmail строку "From: your\@email.com\n". Что это значит? Давайте разбирать по порядку. Данная строка содержит информацию, сообщающую почтовому серверу, от кого получено данное письмо. При формировании письма почтовый сервер поместит в поле От: имя и адрес, взятые из этой строки. Четвертая, пятая и шестая строки, как вы, наверное, догадались, указывают серверу адресата (то есть того, кому нужно ответить на данное письмо) и тему письма. Седьмая строка скрипта содержит тело сообщения - собственно содержание письма. Таких строк может быть несколько. Наконец, последняя строка является признаком конца письма и закрывает программу sendmail. В случае некорректного закрытия скрипт запишет предупреждение в лог-файл сервера. Обратите внимание на то, что перед символом @ обязательно должна стоять обратная косая черта (\). Иначе знак @ будет ошибочно принят за признак массива, что вызовет аварийное завершение скрипта. Вот и все - письмо отослано. Но вот вопрос: что за \n стоит в конце каждой строки, а в шестой строке - даже дважды? Эта последовательность обозначает перевод строки в Unix-подобных системах. В данном же случае она представляет собой ни что иное как конец команды. В шестой она повторяется дважды, чтобы сообщить серверу, что команды закончились и дальше идет тело письма. Вариант второй Для того чтобы пользоваться этим скриптом дома, вам необходимо установить модуль MIME::Lite, который, как и многие другие модули для Перла, можно скачать из архива по адресу http://search.cpan.org/. Скачав и установив MIME::Lite, приступаем к разбору скрипта:
Первая строка подключает необходимый нам модуль MIME::Lite. Вторая создает объект сообщения с параметрами, указанными в строках 3-7. Назначение третьей, четвертой, пятой и шестой строк нам уже известно из предыдущего скрипта. С небольшими изменениями: строки взяты не в двойные, а в одинарные кавычки. Впрочем, это не принципиально. Кроме того, отсутствует обратная косая черта перед символом @ (если строки взяты в двойные кавычки, ее нужно поставить), и в конце строк нет \n. Вот и вся разница. Но за все приходится платить. Этот вариант нагляднее - но у нас появилась восьмая строка. В ней модулю даются указания о том, что письмо сформировано и что нужно его отправить. Иногда возникает необходимость отправить сообщение без sendmail, с помощью сторонней программы. В этом случае скрипт нужно несколько изменить. Например, можно использовать nms_sendmail. На его примере и покажем, как это сделать.
Вместо восьмой строки пишем код, указанный выше. И добавляем строки из документации к nms_sendmail. Как видим, все просто Третий вариант Наконец, рассмотрим последний вариант. Иногда хочется (или приходится) работать с сервером напрямую, без промежуточных программ. Тогда можно применить способ, описанный ниже.
Данный листинг демонстрирует работу с соккетами. Процедура эта непростая, так что обычно стараются обойтись без нее. Но мы для полноты картины рассмотрим и этот вариант отправки писем. Итак, приступим. Первая строка аналогична предыдущему примеру - с той лишь разницей, что мы используем другой модуль. Вторая строка создает объект соккета, т. е. соединение с компьютером, IP-адрес которого 127.0.0.1, на 25-й порт. Третьей строкой мы проверяем, установлено ли соединение. Если соединение не установлено, происходит аварийное завершение скрипта. Теперь - самое главное. В предыдущих примерах мы не формировали заголовок письма - это автоматически делала программа sendmail. Но здесь придется все прописывать собственноручно, в том числе и заголовок. В четвертой строке серверу передается текст "HELO1512". Это означает, что мы готовы к передаче данных. В пятой строке читаем ответ сервера. Это необходимо для корректного общения с сервером и обработки ошибок (здесь мы это рассматривать не станем - все подробно описано в спецификации протокола). Такая же процедура выполняется после каждой команды серверу. В шестой строке серверу передается информация о том, от кого поступило письмо; в восьмой - кому это письмо нужно отослать. Внимательно посмотрите на эти строки. Они отличаются от тех, что мы использовали ранее,- потому что мы общаемся с сервером на прямую. В десятой строке серверу сообщается о том, что мы готовы передавать тело письма. Под телом письма подразумевается не только то, что будет отображаться на экране получателя, но и заголовок. Давайте разобьем эту строку на несколько частей и рассмотрим их более подробно:
И еще один немаловажный момент. В конце каждой команды ставится последовательность 1512, которая сообщает серверу об окончании данной команды. Вот и все. Надеюсь, что помог решить некоторые проблемы тем, кто, начав изучать Perl, уже успел столкнуться с несколькими подводными камнями. В свое время мне никто толком не мог объяснить, как сделать то или другое. Теперь стараюсь помогать тем, у кого возникают вопросы :-)… Источник: web.rbes.ru &npbs; |
|
|||||||
| 12 | |||||||||