Библиотека Интернет Индустрии I2R.ru |
|||
|
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 Наверное, у вас возник вопрос, зачем указывать адресата два раза? Дело в том, что первый раз мы указываем куда отправить письмо. Второй раз - кому. Как правило, эти адреса совпадают, но могут и не совпадать. В этом случае письмо попадет по первому адресу. Пустая строка необходима, что бы отделить заголовок письма от текста. В заголовке, помимо адреса получателя могут быть еще и другие поля. Например: Subject: Тема сообщения Что же умеет класс Net::SMTP? Мы можем создавать соединение так как было указано выше, но иногда необходимо изменить параметры соединения. Тогда используется такой вызов: $smtp = Net::SMTP->new('smtp.mail.ru', Hello => 'me.mail.ru' Timeout => 30 ); Здесь мы указываем, как нужно поздороваться с SMTP-сервером (иногда это необходимо) и максимальное время ожидания ответа сервера. По умолчанию этот параметр равен 120. Теперь рассмотрим, все доступные нам методы класса Net::SMTP. |
|
2000-2008 г. Все авторские права соблюдены. |
|