Первый способ Можно использовать программу sendamail. Мы просто открываем ее как обычный файл и на вход подаем определенные параметры. Например, так: open (MAIL, "| /usr/lib/sendmail pupkin@host.ru"); print MAIL "Subject: subjnn"; print MAIL "Text"; close(MAIL); При использовании такого кода, мы сталкиваемся с проблемой. В пришедшем адресату письме будет указан обратный адрес www@host.ru или что-то в этом роде. Иногда, даже имя сервера не будет иметь ничего общего с именем вашего сервера и вот почему: Дело в том, что web-сервер обычно запущен из под определенного пользователя (www, nobody etc.) Соответствено, ваш скрипт тоже выполняется из под этого же пользователя (т.к. запускает его web-сервер а не вы). Sendmail определяет этого пользователя и указывает в поле "обратный адрес" его адрес. Иногда можно смериться с данной проблемой. Например, если скрипт посылает данные администратору сервера, которому в общем то все равно что будет указано в поле "обратный адрес". Но если ваш скрипт взаимодействует с пользователями, лучше использовать второй способ. Второй способ Суть данного способа в использовании стандартного перлового модуля: м. Расшифровывается он как: 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 messagen"); # Сообщение $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.