Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > Аутентификация в Net::SMTP


Автор: rcdimon 29.7.2008, 21:04
Всем привет. Необходимо написать программу для отправки почты. Использую Net::SMTP

Код

use strict;
use CGI;
use Net::SMTP;
my $smtp = Net::SMTP->new('smtp.yandex.ru',
 Timeout => 30,
  Debug   => 1); # Ваш сервер!
$smtp->mail('rcdimon@yandex.ru');
$smtp->to('rcdimon@yandex.ru');
$smtp->data();
$smtp->datasend("To: rcdimon\@yandex.ru\n");
$smtp->datasend("\n");
$smtp->datasend("Hello ADMIN!!!!!! :-)\n");
$smtp->dataend();
$smtp->quit;



Выводит

Код

Net::SMTP>>> Net::SMTP(2.30)
Net::SMTP>>>   Net::Cmd(2.27)
Net::SMTP>>>     Exporter(5.60)
Net::SMTP>>>   IO::Socket::INET(1.31)
Net::SMTP>>>     IO::Socket(1.30)
Net::SMTP>>>       IO::Handle(1.27)
Net::SMTP=GLOB(0x219260c)<<< 220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Tue, 29 Jul 2008 22:01:04 +0400
Net::SMTP=GLOB(0x219260c)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x219260c)<<< 250-smtp15.yandex.ru expected "EHLO a116.et10.az.ru"
Net::SMTP=GLOB(0x219260c)<<< 250-SIZE 20971520
Net::SMTP=GLOB(0x219260c)<<< 250-8BITMIME
Net::SMTP=GLOB(0x219260c)<<< 250-PIPELINING
Net::SMTP=GLOB(0x219260c)<<< 250-CHUNKING
Net::SMTP=GLOB(0x219260c)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x219260c)<<< 250-DSN
Net::SMTP=GLOB(0x219260c)<<< 250-X-RCPTLIMIT 100
Net::SMTP=GLOB(0x219260c)<<< 250-AUTH=LOGIN
Net::SMTP=GLOB(0x219260c)<<< 250-AUTH LOGIN
Net::SMTP=GLOB(0x219260c)<<< 250-STARTTLS
Net::SMTP=GLOB(0x219260c)<<< 250 HELP
Net::SMTP=GLOB(0x219260c)>>> MAIL FROM:<rcdimon@yandex.ru>
Net::SMTP=GLOB(0x219260c)<<< 530 5.3.0 Sorry [IP]; Authentication required
Net::SMTP=GLOB(0x219260c)>>> RCPT TO:<rcdimon@yandex.ru>
Net::SMTP=GLOB(0x219260c)<<< 530 5.3.0 Sorry [IP]; Authentication required
Net::SMTP=GLOB(0x219260c)>>> DATA
Net::SMTP=GLOB(0x219260c)<<< 530 5.3.0 Sorry [IP]; Authentication required
Net::SMTP=GLOB(0x219260c)>>> To: rcdimon@yandex.ru
Net::SMTP=GLOB(0x219260c)>>> Hello ADMIN!!!!!! :-)
Net::SMTP=GLOB(0x219260c)>>> .
Net::SMTP=GLOB(0x219260c)<<< 550 5.5.2 Unknown command 'To: rcdimon@yandex.ru'
Net::SMTP=GLOB(0x219260c)>>> QUIT
Net::SMTP=GLOB(0x219260c)<<< 550 5.5.2 Unknown command ''


Там есть слова Authentication required

Тогда добавляю строку 
Код

$smtp->auth('rcdimon','pass');


Но ответ

Код

et::SMTP>>> Net::SMTP(2.30)
Net::SMTP>>>   Net::Cmd(2.27)
Net::SMTP>>>     Exporter(5.60)
Net::SMTP>>>   IO::Socket::INET(1.31)
Net::SMTP>>>     IO::Socket(1.30)
Net::SMTP>>>       IO::Handle(1.27)
Net::SMTP=GLOB(0x2195560)<<< 220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Tue, 29 Jul 2008 22:02:42 +0400
Net::SMTP=GLOB(0x2195560)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x2195560)<<< 250-smtp12.yandex.ru expected "EHLO a116.eyaz.ru"
Net::SMTP=GLOB(0x2195560)<<< 250-SIZE 20971520
Net::SMTP=GLOB(0x2195560)<<< 250-8BITMIME
Net::SMTP=GLOB(0x2195560)<<< 250-PIPELINING
Net::SMTP=GLOB(0x2195560)<<< 250-CHUNKING
Net::SMTP=GLOB(0x2195560)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x2195560)<<< 250-DSN
Net::SMTP=GLOB(0x2195560)<<< 250-AUTH=LOGIN
Net::SMTP=GLOB(0x2195560)<<< 250-AUTH LOGIN
Net::SMTP=GLOB(0x2195560)<<< 250-STARTTLS
Net::SMTP=GLOB(0x2195560)<<< 250 HELP
Net::SMTP=GLOB(0x2195560)>>> MAIL FROM:<rcdimon@yandex.ru>
Net::SMTP=GLOB(0x2195560)<<< 530 5.3.0 Sorry [IP]; Authentication required
Net::SMTP=GLOB(0x2195560)>>> RCPT TO:<rcdimon@yandex.ru>
Net::SMTP=GLOB(0x2195560)<<< 530 5.3.0 Sorry [IP]; Authentication required
Net::SMTP=GLOB(0x2195560)>>> DATA
Net::SMTP=GLOB(0x2195560)<<< 530 5.3.0 Sorry [IP]; Authentication required
Net::SMTP=GLOB(0x2195560)>>> To: rcdimon@yandex.ru
Net::SMTP=GLOB(0x2195560)>>> Hello ADMIN!!!!!! :-)
Net::SMTP=GLOB(0x2195560)>>> .
Net::SMTP=GLOB(0x2195560)<<< 550 5.5.2 Unknown command 'To: rcdimon@yandex.ru'
Net::SMTP=GLOB(0x2195560)>>> QUIT
Net::SMTP=GLOB(0x2195560)<<< 550 5.5.2 Unknown command ''


Authentication required Осталось.. что это? Аутентификация у Net::SMTP Не работает?

Автор: nitr 29.7.2008, 23:34
rcdimon, возможно ошиблись в аутен.данных, т.к. скрипт рабочий + авторизация

Код
#!perl
use strict;

use Net::SMTP;

my $smtp = Net::SMTP->new('smtp.yandex.ru', Timeout => 30,  Debug   => 1);
$smtp->auth('login', 'passwd');

$smtp->mail('***@yandex.ru');
$smtp->to('***@yandex.ru');

$smtp->data();
$smtp->datasend("To: ***\@yandex.ru\n");
$smtp->datasend("\n");
$smtp->datasend("тестовое сообщение.\n");
$smtp->dataend();
$smtp->quit;

Цитата
Net::SMTP>>> Net::SMTP(2.31)
Net::SMTP>>>   Net::Cmd(2.29)
Net::SMTP>>>     Exporter(5.62)
Net::SMTP>>>   IO::Socket::INET(1.31)
Net::SMTP>>>     IO::Socket(1.30_01)
Net::SMTP>>>       IO::Handle(1.27)
Net::SMTP=GLOB(0x19eec6c)<<< 220 Yandex ESMTP (NO UCE)(NO UBE) server ready at Wed, 30 Jul 2008 00:30:29 +0400
Net::SMTP=GLOB(0x19eec6c)>>> EHLO localhost.localdomain
Net::SMTP=GLOB(0x19eec6c)<<< 250-smtp5.yandex.ru expected "EHLO ***"
Net::SMTP=GLOB(0x19eec6c)<<< 250-SIZE 20971520
Net::SMTP=GLOB(0x19eec6c)<<< 250-8BITMIME
Net::SMTP=GLOB(0x19eec6c)<<< 250-PIPELINING
Net::SMTP=GLOB(0x19eec6c)<<< 250-CHUNKING
Net::SMTP=GLOB(0x19eec6c)<<< 250-ENHANCEDSTATUSCODES
Net::SMTP=GLOB(0x19eec6c)<<< 250-DSN
Net::SMTP=GLOB(0x19eec6c)<<< 250-AUTH=LOGIN
Net::SMTP=GLOB(0x19eec6c)<<< 250-AUTH LOGIN
Net::SMTP=GLOB(0x19eec6c)<<< 250-STARTTLS
Net::SMTP=GLOB(0x19eec6c)<<< 250 HELP
Net::SMTP=GLOB(0x19eec6c)>>> AUTH LOGIN
Net::SMTP=GLOB(0x19eec6c)<<< 334 ****
Net::SMTP=GLOB(0x19eec6c)>>> *****
Net::SMTP=GLOB(0x19eec6c)<<< 334 ****
Net::SMTP=GLOB(0x19eec6c)>>> *****
Net::SMTP=GLOB(0x19eec6c)<<< 235 Authentication successful.
Net::SMTP=GLOB(0x19eec6c)>>> MAIL FROM:<***@yandex.ru>
Net::SMTP=GLOB(0x19eec6c)<<< 250 2.1.0 Sender syntax Ok;
Net::SMTP=GLOB(0x19eec6c)>>> RCPT TO:<***@yandex.ru>
Net::SMTP=GLOB(0x19eec6c)<<< 250 2.1.5 Recipient address syntax Ok; rcpt=<***@yandex.ru>
Net::SMTP=GLOB(0x19eec6c)>>> DATA
Net::SMTP=GLOB(0x19eec6c)<<< 354 Start mail input; end with <CRLF>.<CRLF>
Net::SMTP=GLOB(0x19eec6c)>>> To: ***@yandex.ru
Net::SMTP=GLOB(0x19eec6c)>>> ЄхёЄютюх ёююс∙хэшх.
Net::SMTP=GLOB(0x19eec6c)>>> .
Net::SMTP=GLOB(0x19eec6c)<<< 250 2.0.0 accepted; S1053229AbYG2Uaa
Net::SMTP=GLOB(0x19eec6c)>>> QUIT
Net::SMTP=GLOB(0x19eec6c)<<< 221 2.0.0 smtp5.yandex.ru Out

Автор: rcdimon 30.7.2008, 10:08
Да не, я проверял несколько раз данные. 
И даже не в яндексе дело подключался к разным серверам.. всегда одно и то же.. что с ней, что без- ничего не меняется

Автор: rcdimon 30.7.2008, 10:26
Отладил по шагам- Net::SMTP вылетает на строке 

Код

require Authen::SASL;


Причем без всяких ошибок и сообщений. Установил я этот Authen::SASL, судя по логу аутентификация прошла успешно... Однако, на почту ничего не приходит все равно

Добавлено через 6 минут и 7 секунд
Видимо яндекс не дает отправить письмо через него. Подключаился к другому SMTP серверу- сообщение прошло.

Автор: nitr 30.7.2008, 21:35
rcdimon, я вам привел ваш же код. Сообщение пришло нормально. Возможно "Hello ADMIN!" воспринимается как спам. Ни с каких других серверов не тестил. А может быть из вашей подсети прова спам рассылался, поэтому временный блок. Проблема явно не в модуле и скрипте.
P.S.:
Цитата
C:\>perl -v

This is perl, v5.10.0 built for MSWin32-x86-multi-thread
(with 3 registered patches, see perl -V for more detail)

Copyright 1987-2007, Larry Wall

Binary build 1002 [283697] provided by ActiveState http://www.ActiveState.com
Built Jan 10 2008 11:00:53

Perl may be copied only under the terms of either the Artistic License or the
GNU General Public License, which may be found in the Perl 5 source kit.

Complete documentation for Perl, including FAQ lists, should be found on
this system using "man perl" or "perldoc perl".  If you have access to the
Internet, point your browser at http://www.perl.org/, the Perl Home Page.

C:\>

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)