LINUX.ORG.RU

sendmail or Net::SMTP


0

0

Вобщем, такая беда. Мой комп не имеет фиксированного ip-адреса и почту я могу отсылать только с чужого smtp-сервака (логин и пасс требуются). Мой скрипт (perl) должен послать письмо, но я столкнулся с проблемами. 1) я посылаю письмо, испрользуя Net::SMTP. но блин! вот кусок из скрипта =============== use Net::SMTP; my $smtp = Net::SMTP->new($cfg{smtp_server}, Debug => 0) or croak "Unable to create Net::SMTP\n"; $smtp->auth("****LOGIN*****","xxxxPASSxxxx");

$smtp->mail($from); $smtp->to($to); $smtp->data(); $smtp->datasend("From: $from\n"); $smtp->datasend("X-Mailer: Perl Powered Socket Net::SMTP Mailer\n"); $smtp->datasend("Subject: $subject\n"); $smtp->datasend("\n"); $smtp->datasend($message); $smtp->dataend(); $smtp->quit(); ========= пишется следующее: Unknown callback: 'authname'. (user|auth|language) вот тримодуля, которые к этому привели: SMTP.pm , SASL.pm , Cyrus.pm

authen-sasl и authen-sasl-cyrus пришлось отельно собирать, в редхете это _напрочь_ отсутствует, хотя Net::SMTP->auth ТРЕБУЕТ последних !

2)через /usr/sbin/sendmail но КАК послать письмо smtp-серверу с логином_ и _пассом_ ? пользовал webmin, но там ничего про авторизацию :(

3)вот ещё:

==============

($x, $x, $x, $x, $here) = gethostbyname($null); ($x, $x, $x, $x, $there) = gethostbyname($cfg{smtp_server});

my $thisserver = pack('S n a4 x8', 2, 0, $here); my $remoteserver = pack('S n a4 x8', 2, 25, $there);

(!(socket(S, 2, 1, 6))) && (croak "Socket failure. $!"); (!(bind(S, $thisserver))) && (croak "Bind failure. $!"); (!(connect(S, $remoteserver))) && (croak "Connection to $cfg{smtp_server} has failed. $!");

my $oldfh = select(S); $| = 1; select($oldfh);

$_ = <S>; ($_ !~ /^220/) && (croak "Sending Email: data in Connect error - 220. $!");

print S "HELO $cfg{smtp_server}\r\n"; $_ = <S>; ($_ !~ /^250/) && (croak "Sending Email: data in Connect error - 250. $!");

print S "MAIL FROM:<$from>\n"; $_ = <S>; ($_ !~ /^250/) && (croak "Sending Email: Sender address '$from' not valid. $!");

print S "RCPT TO:<$to>\n"; $_ = <S>; ($_ !~ /^250/) && (croak "Sending Email: Recipient address '$to' not valid. $!");

print S "DATA\n"; $_ = <S>; ($_ !~ /^354/) && (croak "Sending Email: Message send failed - 354. $!");

===================== это содрано с какого-то скрипта, но я не понимаю опять же как авторизнуться :)

====================

Пожалуйста, кто может, помогите! Всё-таки предпочитаю 1) и 2) ....

весия perl 5.8.0 asplinux9

заранее спасибо!


Все в твоей программе вроде правильно.

У меня такая же работает. У меня почтовый сервер iPlanet Messaging
Server стоит на Солярисе. Он настроен так, что принимает
почту без аутентификации, но только с определенных IP. Во внешнюю
сеть он настроен на SmartHost, которым является почтовый сервер
на Lotus, который собственно маршрутизирует почту. 

Первым делом хорошо бы тебе книжкой обзавестись Линколь Штайн "Разработка сетевых программ на Перл".
Там это подробно объясняется.

Насколько я понимаю sasl и прочее требует расширенного SMTP, что
означает проткол ESMTP. Наверное дополнительные параметры нужны какие-то.

Скомные соображения:

В первом случае ты подрубаешься через Net:SMTP к серверу.
Надо ковырять еще этот модуль.

В третьем прямо по протоколу SMTP без обвертки перл-модуля.
Надо протоколs SMTP и ESMTP изучить.

Во втором случае через промежуточный MTA (sendmail), который
может быть на своем собственном компе. Тогда настрой sendmail, так
чтобы он посылал пароли и почту и тд на внешний сервер.
Тогда на sendmail ты можешь слать от себя без пароля и потом
исользуй первый или третий методы.

good luck!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.