Портал для веб-мастера
Вход пользователей
Поиск статей
WoWeb.ru » Статьи » Программирование для Web » PERL/CGI

Net-SMTP
Первый способ

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


 open (MAIL, "| /usr/lib/sendmail pupkin@host.ru");
 print MAIL "Subject: subj";
 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"); # Указываем информацию для поля "Кому" $smtp->datasend(""); # Пустая строка $smtp->datasend("test message"); # Сообщение $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 · Добавлена: 2003-04-10
Просмотров: 2872 · Рейтинг: 0.0

Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]

Категории раздела
Flash
Apache
WWW
PhotoShop
Веб-дизайн
Раскрутка и реклама
Базы данных
3D графика
Хостинг
Истории веб-мастеров
Web-технологии
Сетевая безопасность
Программирование для Web
Операционные системы

Новые статьи
Лучшие статьи
Популярные статьи
Комментируемые статьи
Разделы сайта
Скрипты
Статьи
Шрифты
Флэш исходники
HTML шаблоны
Партнерки
Клипарты
Смайлы
Фоны
Гифы
Иконки
Опрос сайта
Ведете ли вы блог?
Всего ответов: 60112
Наша кнопка
WoWeb.ru - портал для веб-мастера