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


Автор: comhunt 17.9.2010, 20:23
Предыстория
На сервере имеется почтовый домен postdomain.com.
Имеется ряд пользователей этого почтового домена - т.е. фактически почтовые ящики.
Имеется форма где посетитель сайта вводит адрес своей почты.
Если он указывает несуществующий адрес почты то тут возможны два случая:
1. Почтовый домен введенного емаил не принадлежит данному серверу - проблем никаких.
2. Почтовый домен введенного емаил принадлежит данному серверу (postdomain.com) - в этом случае попытка отправить письмо по этому адресу вываливает ошибку в лог и завершает выполнение сценария.
Отправку осуществляю при помощи модуля  MIME::Lite
Постановка задачи:
Надо каким-то образом выяснить есть ли введенный пользователь на сервере или нет перед отправкой письма, чтобы избежать завершения сценария.

Автор: KSURi 17.9.2010, 20:29
Никак вы это не выясните, не отправив письмо.

Автор: comhunt 17.9.2010, 21:00
>Никак вы это не выясните, не отправив письмо.
А почему это нельзя выяснить? Ведь домен находится на том же сервере где и скрипт! Неужели нельзя как то обратиться к почтовому серверу и выяснить есть ли пользователь или нет?

Автор: dva300 17.9.2010, 21:09
если вы все по умолчанию и используете sendmail то возможно там в полезных скриптах что-то и есть на эту тему чтобы совсем красиво в виде ключика...
но первое что приходит на ум это файл access или passwd - сервер то ваш. не вижу сложностей.

P.S. я правда не совсем понял что это вы такое делаете. 
обычно задача стоит в проверке получателя за пределами вашего почтового домена 

Автор: comhunt 17.9.2010, 21:26
Да проблема в том что пользователем заполняющим форму может оказаться владелец ящика на моем сервере и написать его при этом неправильно. (такое периодически случается...) А мой скрипт должен прислать ему на почту письмо-уведомление. Так вот умный почтовый сервер при попытке прислать письмо на несуществующий адрес в домене который ему принадлежит вываливает ошибку и скрипт киляется. В этом то проблема и есть, и ее надо как-то избежать.

Автор: dva300 17.9.2010, 21:37
Цитата(comhunt @ 17.9.2010,  21:26)
Да проблема в том что пользователем заполняющим форму может оказаться владелец ящика на моем сервере и написать его при этом неправильно. (такое периодически случается...) А мой скрипт должен прислать ему на почту письмо-уведомление. Так вот умный почтовый сервер при попытке прислать письмо на несуществующий адрес в домене который ему принадлежит вываливает ошибку и скрипт киляется. В этом то проблема и есть, и ее надо как-то избежать.

хм... показываете скрипт. 
могу предположить что все может решиться заменой $msg->send || die на что-нибудь другое

Автор: comhunt 18.9.2010, 09:12
Кусок кода для отправки:


my $msg = MIME::Lite->new( From    => $sender_email,
                           To      => "$recepient",
                           Subject => "$topic",
                           Type    => "text/plain; charset=windows-1251",
                           Data    => "$text" );

$msg->send('smtp', $cfg::sender_server, Timeout=>$cfg::sender_timeout);

Вот проблема как раз в $recepient

Автор: dva300 18.9.2010, 10:02
Цитата(comhunt @ 18.9.2010,  09:12)
Кусок кода для отправки:


my $msg = MIME::Lite->new( From    => $sender_email,
                           To      => "$recepient",
                           Subject => "$topic",
                           Type    => "text/plain; charset=windows-1251",
                           Data    => "$text" );

$msg->send('smtp', $cfg::sender_server, Timeout=>$cfg::sender_timeout);

Вот проблема как раз в $recepient

попробуйте так

Код

undef $@;
eval { $msg->send(...) };  
warn "Не могу отправитьпочту: $@\n" if $@;


Автор: arto 18.9.2010, 14:29
все зависит от архитектуры вашей mail системы.
у вас там могут быть как простые пользователи, так и алиасы и виртуальные пользователи.
если нс можете разобраться -- просто пошлите письмо и попросите ответить.

Автор: MaxPayne 20.9.2010, 14:33
У нас на линуксе существовали папки пользовтелей - соответственно созданные при заводе почты. Возможно есть смысл проверять есть ли данные данные папки на серевере. Если есть, то есть и пользователь.

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