WebClub - Всероссийский Клуб Веб-разработчиков
WebClub.RU » Архив » Net::SMTP Perl

Net::SMTP Perl


Дата публикации: 17-03-2013

Иногда при программировании для 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.

Популярное

Не так давно в сети появился новый сервис, под названием Dead Man Zero. Этот сервис сделал...
Рынок социальных площадок уже давно стал стабильным. Несмотря на то, что время от времени...
Artisteer 4 – единственный в своем роде продукт, позволяющий автоматизировать работу над созданием...
Март 2017 (1)
Февраль 2017 (3)
Январь 2017 (1)
Август 2016 (1)
Май 2016 (2)
Ноябрь 2015 (1)

Карта сайта: 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

Друзья сайта

Хотите продать свой сайт?
- Мы быстро и удобно для Вас сможем его купить:
  • Заявка на продажу сайта
  • Раcсматриваем цены на каждый сайт в индивидуальном порядке.

    Случайная цитата

    Неизвестный автор:

    "Лучший способ монетизировать свой Твиттер – это бросить Твиттер и найти нормальную работу."

    Опрос

    Ваша техника?

    Настольный компютер
    Ноутбук
    Смартфон
    iPad
    iPhone
    другое