Думаю что время SMTP-серверов без авторизации "кануло в лету".
Во всяком случае на большинстве (если не на всех) публичных сервисах - точно. Отсюда вытекает необходимость работать с SMTP с поддержкой авторизации.
NB: Я предпочитаю работать с сетью по возможности через модули более низкого уровня, то есть принцип примерно такой:
- Если задача реализуема через Socket.pm, я использую его,
иначе: IO::Socket, иначе LWP.
- Если задача реализуема через модуль семейства Net::, я использую
соответствующий модуль. Хотя в большинстве своем модули Net:: - надстройка над модулем IO::Socket, для некоторых протоколов вполне оправданно их применение. Хотя есть некоторые специфичные задачи для которых необходимо использовать Net::RawIP, который имеет более низкий уровень чем даже Socket.pm.
Ну да вернемся к нашим "баранам". Из вышенаписанного вытекает, что для отправки почты в большинстве случаев вполне оправданно пользовться модулем Net::SMTP. Если необходимо работать со сложными MIME-типами, можно подключить модуль Mime::Lite, или один из семейства Mime::.
Но что делать когда возникает необходимость работать с SMTP-авторизацией?
Я использую модуль Net::SMTP_auth. Он поддерживает все методы модуля Net::SMTP, и добавляет ему еще один метод: auth. Фактически данный модуль является подклассом модуля Net::SMTP, и во многих случаях есть смысл использовать родной метод Net::SMTP auth, но Net::SMTP_auth имеет несколько большие возможности, в частности поддерживает прозрачную работу с модулем Authen::NTLM, позволяющему проходить авторизацию по протоколу NTLM.
Пример работы с модулем:
#!/usr/bin/perl -w
use Net::SMTP_auth;
$smtp = Net::SMTP_auth->new('mailhost');
$smtp->auth('CRAM-MD5', 'user', 'password');
$smtp->mail($ENV{USER});
$smtp->to('postmaster');
$smtp->data();
$smtp->datasend("To: postmaster\n");
$smtp->datasend("\n");
$smtp->datasend("A simple test message\n");
$smtp->dataend();
$smtp->quit;



Комментировать