Анимация
JavaScript


Главная  Библионтека 

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

Теперь о плохом: этот модуль не входит в стандартную поставку Perl. Вы должны загрузить его самостоятельно и установить на том компьютере, откуда собираетесь отправлять почту. Модуль Net::SMTP является частью пакета libnet, который содержит все виды полезных модулей, обеспечивающих работу в сети. Пакет libnet находится

на прилагаемом к этой книге компакт-диске.


В приложении "Инсталляция модулей г1" подробно описан процесс установки модулей в Perl под управлением таких операционных систем, как UNIX, Windows и Macintosh. Кроме того, вы получите инструкции по установке собственных копий модулей на случай, если системный администратор не захочет устанавливать общую копию.

Функции mail для систем без программы МТА представлена в листинге 22.2. Она включает несколько необычный (новый) синтаксис, с которым вы незнакомы. Обязательно прочитайте последующие пояснения.

Alciitr 22.2. Фyн<мияsend шil для систем без 1

1: I Функция для слтрешки хпы для сялкм прсгрнккы МТА 2: sub send mail {

3: ny{$to, $£гош, Ssubject, ebody)=e ; 4:

5: lose Net::SMTP; 6:

7: t вам гргчоэяхя нить стдки спрск,

в: t -чгсёы указгаъ прашпыюе екя юлсыаго об

9: пу $relay="relayhost.yourisp.coiii";

10: шу $aitp = Ket::SMTP->new($relay);

11: die -Вевозмохно апыЕЬ соединенне: $!" if (1 definei $smtp); 12:

13: Samtp->mail(5from);

14: $snt>t($t); 15:

16: Ssratp->data();

17: Ssffltp->datasend("To: $to\n");

18:. $smtp->datasend("From: $from\n");

19: $smtp->datasend("Subject: $subject\n");

20: $smtp->datasend("\n");

21: foreach(gbody) {

22; Ssmtp->datasendC$ \n");

23: }

24: $Bmtp->dataend(); i Обаяйте вниувбзж та срфогрио: жг "s"

25: $tp>quit;

26: > . -

Проведем анализ программы.

• Строка 5. Подключается модуле SMTP, который позволяет намного упростить отправку почты.

. • Строка W. Создается объектSMTP, связанный с соответствующим почтовым сервером, адрес которого был указан в строке 9.



• Строка 23. Серверу электронной почты отправляются заголовки и тело сообщения. Для получения более подробной информации см. пояснения по функциям Net: :SMTP, приведенные ниже.

Чтобы протестировать эту функцию, достаточно вызвать ее с четырьмя аргументами, представляющими отдельные части почтового сообщения:

gbody=("Пожалуйста, прекратите интриги!", -Спасибо!")! send mail(presidentiwhitehouse.gov, ownergqeeJcsalad.org, Taxes, Sbody);

Первое, что может удивить вас в этой функции, это строка = Net:

При ее выполнении создается нечто, именуемое объектом. Объект - это не скаляр, не

случайные данные ("мусор") и не массив, это нечто совсем иное. Значение в переменной $smtp представляет соединение с программой пересылки почты, которой можно управлять.

Представьте себе объект как значение особого вида, которое позволяет вызывать функции,

имеющие к нему отношение.

Следующей "странностью" для вас может оказаться строка Ssmtp->mail(Sfrom). Элемент -> соединяет объект, заданный слева, с функцией, указанной справа от него. Поэтому mail - это вызов функции, в котором используется объект Ssmtp, созданный

на предыдущей строке.

Для использования модуля Net::SMTP вам необязательно вникать во все подробности синтаксиса объекта - достаточно его соблюдать. Ниже перечислены функции, которые можно использовать вместе с объектом Net:

ail(addr). Функция mail указывает, кто является отправителем почты. Здесь вполне можно сообщить "не свой" адрес.

to(addr). Функция to определяет, кому вы отправляете сообщение. При вызове функции to со списком имен каждый адресат получит копию данного почтового сообщения. Имена получателей необязательно должны содержаться в теле сообщения, например, если вы их поместите в поле

. data(). Функция data означает, что вы готовы отправить само сообщение,

• $smtp->datasend(data). Эта функция отправляет действительный текст сообщения. Вы должны явно вывести обязательные поля заголовка (То:, From: и т.д.), а такие поля, как Date: и Received:, генерируются автоматически. Между заголовком и телом сообщения необходимо вывести пустую строку: $sintp->datasend("\n"). За пустой строкой следует тело сообщения, которое также посылается с помощью конструкции $smtp->datasend().

• $smtp->dataend() Функция dataend означает, что вы завершили отправку тела

сообщения. Сообщение не будет послано до тех пор, пока не обозначится конец сообщения.

quit(). Эта функция завершает сеанс связи с SMTP-сервером

Отправка почты изWeb-страницы

Теперь в вашем распоряжении есть способ отправки электронной почты программными средствами с помощью функции send mail(}, а уж организовать это "мероприятие" из Web-страницы - пара пустяков! Вам просто нужно спроектировать



страницу и координирующую "совместные" действия.

Пример , HTML-формы, предназначенной для отправки электронной почты, представлен в листинге 22.3. Эта форма не отличается особой изысканностью, но при желании

вы можете "украсить" ее по своему вкусу.

ст 22.3. ]рма вки эпе)о

1: <1-Предполагается галиякв гратам« /cqi-biii/iiiailer.cgi~> 2: <FORM METHOD=POST ACTION="/cgi-bin/mailer.cgi-> 3: ЕВш адрес: <IIiPUT TYPEtext NAME=return addr><BR> 4: Тема: <INPnT TXE&*sxt №MEfc«ubdect><EIES 5: <3»

6: Сообщение:<BR>

7: <ЗЕ!ЖЕА NAHE=body ROWS=20 COLS=60 WRAP=hard> 8: Ейеррпе текст соо:ззия 9: </1Е!«Ег 10: <Н

11: <INPUT TYPE=SUBMIT 7АЬиЕ=0тправка сооб1цения"> 12: </FORM>

CGI-программа для отправки почты ненамного больше. Вот как она выглядит:

ll/iisr/bin/perl -v use ci; use CGa: qv{:all); гдэeCGI.•.Carp qw(futalsToBrowser);

* ВспэЕЕпе сн?рцвю sdjiail из

i лкслжга 22.1 или 22.2!

pdnt header;

iiy$return=param{"return addr");

if {! defitBd $return or"! $return) {

print ЧЁсбхсркмс указать адрес e-aeil<P>";

ny $sufcde=paran("sufcde");

if {! (tefine Ssubject or ! Sstibject) {

print "IfecipKMC указ теа сссэння";

i оосб1эз[<й ЭБЕЩХНЕСЙ почта sendjnailfwebmasteremybost.com,

parain($return),

рагаш($ sub ject),

paran("bo"));

print "ГЕнда сдпраЕпе.";

Следует обратить внимание на несколько моментов в этой маленькой программе. Во-первых, чтобы обеспечить работоспособность этой программы, вы должны вставить функцию send mail, текст которой приведен либо в листинге 22.1, либо в листинге 22.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