На главную

Библиотека Интернет Индустрии I2R.ru

Rambler's Top100

Малобюджетные сайты...

Продвижение веб-сайта...

Контент и авторское право...

Забобрить эту страницу! Забобрить! Блог Библиотека Сайтостроительства на toodoo
  Поиск:   
Рассылки для занятых...»
I2R » И2Р Программы » Программирование » Perl

Net-SMTP

Иногда при программировании для web, возникает необходимость отправить из скрипта на перле письмо. Существует несколько способов реализации этого.


Первый способ


Можно использовать программу sendamil. Мы просто открываем ее как обычный файл и на вход подаем определенные параметры. Например, так:

  open (MAIL, "| /usr/lib/sendmail pupkin@host.ru");
    print MAIL "Subject: subj\n\n";
    print MAIL "Text";
  close(MAIL);

При использовании такого кода, мы сталкиваемся с проблемой. В пришедшем адресату письме будет указан обратный адрес www@host.ru или что-то в этом роде. Иногда, даже имя сервера не будет иметь ничего общего с именем вашего сервера и вот почему: Дело в том, что web-сервер обычно запущен из под определенного пользователя (www, nobody etc.) Соответствено, ваш скрипт тоже выполняется из под этого же пользователя (т.к. запускает его web-сервер а не вы). Sendmail определяет этого пользователя и указывает в поле "обратный адрес" его адрес. Иногда можно смериться с данной проблемой. Например, если скрипт посылает данные администратору сервера, которому в общем то все равно что будет указано в поле "обратный адрес". Но если ваш скрипт взаимодействует с пользователями, лучше использовать второй способ.


Второй способ


Суть данного способа в использовании стандартного перлового модуля: Net::SMTP. Расшифровывается он как: Simple Mail Transfer Protocol Client. Т.е. клиент для работы с SMTP протоколом. Вот небольшой пример использования модуля Net::SMTP:

use Net::SMTP;                                # Подключаем модуль.
$smtp = Net::SMTP->new('smtp.mail.ru');       # Указываем SMTP сервер.
   
$smtp->mail('vasya@host.ru');                 # Указываем от кого письмо.
$smtp->to('pm@host2.ru');                     # Указываем кому письмо.
   
$smtp->data();                                # Начинаем посылку данных
$smtp->datasend("To: postmaster \n");
					# Указываем информацию для поля "Кому"
$smtp->datasend("\n");                        # Пустая строка
$smtp->datasend("test message\n");            # Сообщение
$smtp->dataend();                             # Заканчиваем посылку даных
   
$smtp->quit;                                  # Закрываем соединение

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

Subject: Тема сообщения
X-Mailer: Почтовый клиент. Можно имитировать отправку с одного из известных почтовых клиентов.
Content-Type: Тип содержимого. По умолчанию текст. Но если указать: "Content-Type: text/html; charset=koi8-r", то содержимое письма будет обрабатываться у получателя как HTML.

Что же умеет класс Net::SMTP? Мы можем создавать соединение так как было указано выше, но иногда необходимо изменить параметры соединения. Тогда используется такой вызов:

  $smtp = Net::SMTP->new('smtp.mail.ru',
                          Hello => 'me.mail.ru'
                          Timeout => 30 
                          );

Здесь мы указываем, как нужно поздороваться с SMTP-сервером (иногда это необходимо) и максимальное время ожидания ответа сервера. По умолчанию этот параметр равен 120.

Теперь рассмотрим, все доступные нам методы класса Net::SMTP.
to ( адрес [, адрес ] ) - указывает получателя. Заметьте, что можно указывать как один, так и более e-mail'ов.
data () - инициирует отправку данных.
verify ( адрес ) - проверяет указанный адрес на лигитивность.
quit () - посылает серверу команду QUIT.

Philip A. Koryaka
Российский клуб вебмастеров

Другие разделы
C, C++
Java
PHP
VBasic, VBS
Delphi и Pascal
Новое в разделе
Базы данных
Общие вопросы
Теория программирования и алгоритмы
JavaScript и DHTML
Perl
Python
Active Server Pages
Программирование под Windows
I2R-Журналы
I2R Business
I2R Web Creation
I2R Computer
рассылки библиотеки +
И2Р Программы
Всё о Windows
Программирование
Софт
Мир Linux
Галерея Попова
Каталог I2R
Партнеры
Amicus Studio
NunDesign
Горящие путевки, идеи путешествийMegaTIS.Ru

2000-2008 г.   
Все авторские права соблюдены.
Rambler's Top100