Написал службу рассылки по почте файлов.
Долгое время работала, но у одного пользователя перестала.
Начал разбираться и обнаружил что не отрабатываются исключения, при попытке подключения к smtp серверу.
Служба виснет на smtp.Connect().
Exception не отрабатывает
Вот код
- Код: Выделить всё
clSMTP := TIdSMTP.Create(nil);
clSMTP.Host := MsgOper.smtp;
clSMTP.Port := MsgOper.smtp_port;
clSMTP.Username := MsgOper.login;
clSMTP.Password := MsgOper.Password;
clSMTP.AuthType := satDefault;
clSMTP.MailAgent:= MsgOper.smtp_MailAgent;
...
остальные настройки и формирование письма
...
try
clSMTP.Connect();
clSMTP.Send(sMessage);
except
on E: EIdSMTPReplyError do
begin
sTXT := 'message: ' + E.Message + ' / ' +
'code: ' + IntToStr(E.ErrorCode) + ' / ' +
'reply: ' + E.EnhancedCode.ReplyAsStr;
writelog.WrLog( sTXT );
writelog.WrLog( 'ОШИБКА!!! Подключение к SMTP серверу не удалось. '
+'Проверьте email, настройки программы, а так же не блокируется ли порт SMTP сервера антивирусом или файреволом(брандмауэром) ');
end;
end;
clSMTP.Disconnect;
clSMTP.Destroy;
Виснет именно на clSMTP.Connect();
проверил ставя сохранение меток в лог writelog.WrLog('1') до коннекта и после writelog.WrLog('2')
Не понятно, то ли Коннект уходит в бесконечную попытку, то ли сервер не возвращает сообщение об ошибке, то ли я не верно написал except on E: EIdSMTPReplyError do
P.S. сервер smtp.yandex.ru
Добавлено спустя 1 час 3 минуты 22 секунды:
Вопрос закрываю.
Добавил
- Код: Выделить всё
On E: Exception Do
ShowMessage('Exception --- '+E.ToString);
Это уже отрабатывается и возвращает коннекшн тайм аут.