Perl - статьи
ba2f5a3f

Третий вариант


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

1. | use IO::Socket; 2. | my $socket = IO::Socket::INET->new ("127.0.0.1:25"); 3. | defined $socket or die "ERROR: $!"; 4. | $socket->print ("HELO1512"); 5. | $r = <$socket>; 6. | $socket->print ("MAIL FROM:John Doe
<jd\@domain.com>1512"); 7. | $r = <$socket>; 8. | $socket->print ("RCPT TO:Frank Smith
<fs\@domain.com>1512"); 9. | $r = <$socket>; 10.| $socket->print ("DATA1512"); 11.| $r = <$socket>; 12.| $socket->print ("From:John Doe
<jd\@domain.com>\nTo:Frank Smith <fs\@domain.com>\nSubject:Test.
\n\nIt's just test!!!1512"); 13.| $r = <$socket>; 14.| $socket->print ("\.1512"); 15.| $r = <$socket>; 16.| $socket->print ("QUIT1512"); 17.| $r = <$socket>;

Данный листинг демонстрирует работу с соккетами. Процедура эта непростая, так что обычно стараются обойтись без нее. Но мы для полноты картины рассмотрим и этот вариант отправки писем. Итак, приступим.

Первая строка аналогична предыдущему примеру - с той лишь разницей, что мы используем другой модуль.

Вторая строка создает объект соккета, т. е. соединение с компьютером, IP-адрес которого 127.0.0.1, на 25-й порт. Третьей строкой мы проверяем, установлено ли соединение. Если соединение не установлено, происходит аварийное завершение скрипта.

Теперь - самое главное. В предыдущих примерах мы не формировали заголовок письма - это автоматически делала программа sendmail. Но здесь придется все прописывать собственноручно, в том числе и заголовок.

В четвертой строке серверу передается текст "HELO1512". Это означает, что мы готовы к передаче данных. В пятой строке читаем ответ сервера. Это необходимо для корректного общения с сервером и обработки ошибок (здесь мы это рассматривать не станем - все подробно описано в спецификации протокола). Такая же процедура выполняется после каждой команды серверу.

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

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

From:John Doe <jd\@domain.com>\n To:Frank Smith <fs\@domain.com>\n Subject:Test.\n\n It's just test!!!1512


Теперь более или менее понятно, что есть что. Единственное замечание: перед собственно письмом должно стоять два \n (обязательно два - иначе сервер не поймет, что здесь начинается письмо).

В строке 14 серверу сообщается об окончании письма. Наконец, в шестнадцатой строке разрывается соединение.

И еще один немаловажный момент. В конце каждой команды ставится последовательность 1512, которая сообщает серверу об окончании данной команды.

* * *

Вот и все. Надеюсь, что помог решить некоторые проблемы тем, кто, начав изучать Perl, уже успел столкнуться с несколькими подводными камнями. В свое время мне никто толком не мог объяснить, как сделать то или другое. Теперь стараюсь помогать тем, у кого возникают вопросы :-)…

document.write('');



Новости мира IT:

  • 02.08 -
  • 02.08 -
  • 02.08 -
  • 02.08 -
  • 02.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 01.08 -
  • 31.07 -
  • 31.07 -
  • 31.07 -
  • 31.07 -
  • 31.07 -


  • Архив новостей

    Последние комментарии:

     (66)

    2 Август, 17:53

     (19)

    2 Август, 17:51

     (34)

    2 Август, 15:40

     (42)

    2 Август, 15:35

     (1)

    2 Август, 14:54

     (3)

    2 Август, 14:34

     (3)

    2 Август, 14:15

     (2)

    2 Август, 13:34

     (7)

    2 Август, 13:04

     (3)

    2 Август, 12:28



    BrainBoard.ru

    Море работы для программистов, сисадминов, вебмастеров.

    Иди и выбирай!


    Loading

    google.load('search', '1', {language : 'ru'}); google.setOnLoadCallback(function() { var customSearchControl = new google.search.CustomSearchControl('018117224161927867877:xbac02ystjy'); customSearchControl.setResultSetSize(google.search.Search.FILTERED_CSE_RESULTSET); customSearchControl.draw('cse'); }, true);

    IT-консалтинг Software Engineering Программирование СУБД Безопасность Internet Сети Операционные системы Hardware
    PR-акции, размещение рекламы — ,
    тел. +7 495 6608306, ICQ 232284597

    Пресс-релизы —

    This Web server launched on February 24, 1997

    Copyright © 1997-2000 CIT, © 2001-2009
    Внимание! Любой из материалов, опубликованных на этом сервере, не может быть воспроизведен в какой бы то ни было форме и какими бы то ни было средствами без письменного разрешения владельцев авторских прав.
    Великолепная на самом современном оборудовании от компании Гардарики.


    Содержание раздела