Отправка электронной почты из Perl

Категория: Perl , Веб-мастеру Комментариев: 0

Для отправки электронной почты в Perl существует два самых распространенных механизма: с помощью утилиты sendmail и с помощью модуля Net::SMTP.
Рассмотрим каждый поподробней.

Для отправки письма с помощью sendmail нужно просто открыть программу как файл, напечатать в нее все заголовки письма и закрыть:
open MAIL, '|/path/to/your/sendmail -t'; # Pipe к sendmail
print MAIL "From: mailrobot@my.host\n",
"To: webmaster@my.host\n",
"Subject: Wow! I got some mail for you!!!\n\n",
$message;
close MAIL;

Этот механизм до неприличия прост, но не на всех машинах имеется настроенный sendmail (например, на Windows-машинах). Альтернативой может послужить модуль Net::SMTP, который позволяет отправлять электронные письма через внешний SMTP-сервер.
Чтобы использовать функционал данного модуля в своей программе нужно сначала его импортировать:
use Net::SMTP;
Затем нужно создать новый объект Net::SMTP:
$smtp = Net::SMTP->new('smtp.server.ru', Timeout => 60);
Первый параметр, передаваемый в конструктор класса — это адрес SMTP-сервера. Он обязателен. Остальные опции могут быть переданы в конструктор по желанию в виде хеша. Вот описание основных опций:
Timeout — максимальное время ожидания ответа сервера (в секундах);
Debug — включение отладочной информации (1 — включить, 0 — выключить. По умолчанию выключено);
Hello — Если SMTP-сервер требует идентификации, то в этом параметре следует передать имя своего почтового домена (например 'mail.domain').

После создания нового Net::SMTP-объекта необходимо произвести процедуру авторизации на сервере. Для этого используется метод auth (login, password):
$smtp->auth('login','password');

После отправки данных авторизации и ее удачного выполнения можно переходить непосредственно к созданию и отправке сообщения.
Первым делом необходимо указать адрес отправителя с помощью метода mail ():
$smtp->mail('my@mail.adr');
Затем указываем адрес получателя (или получателей) и дополнительные опции с помощью метода recipient ():
$smtp->recipient('my2@mail.adr', {Notify => ['FAILURE', 'DELAY'], SkipBad => 0});
Здесь дополнительные опции также передаются в виде хеша. Опция Notify указывает на то, нужно-ли возвращать статус отправленного письма. SkipBad указывает на то, возвращать-ли ошибку если адрес получателя неверный (см. проверка правильности адреса).

После указания адреса отправителя и получателя можно переходить непосредственно к передаче сообщения.
Вызываем метод data () и начинаем добавлять построчно текст письма с помощью метода datasend ():

$smtp->data();
$smtp->datasend("\n");
$smtp->datasend("Hello,World\n");

После завершения ввода текста сообщения вызываем метод dataend () и закрываем соединение методом quit ():

$smtp->dataend();
$smtp->quit();

Скачать пример
Остались вопросы? Задавайте!

ЗЫ: Hello, World!

Автор: Кто-то   @   5 апреля 2009 Комментариев: 0
Метки : ,

Поблагодарить автора

Webmoney Z163628999150, R617151845974

Комментариев: 0

Комментариев к этой записи поке нет. Ваш комментарий будет первым.
оставить комментарий

Предыдущая запись
«
Следующая запись
»