Вы под D7 пишите? Я уже давно переписал все под D2007, а там эти библиотеки несколько изменились. Насколько я помню, одним из подводных камешков я вилось, то что необходимо проверять наличие коннекта, независимо то того 1 раз вы подключаетесь или 10, и в случае неудачи первой попытки делать это вторично.
у меня это реализовано так:
Код:
TryCount := 0; //Организуем цикл с нужным количеством попыток отправки в моем случае 3
repeat
try
if not SMTP.Connected then SMTP.Connect; // Проверяем имеющееся подключение и если его нет подключаем
SMTP.Send(Mail); // Отсылаем сообщение
Mail.Clear; // В новой версии библиотек TIdMessage оформлено как отдельный контрол. У меня Mail: TIdMessage
SMTP.Disconnect; // Отключаем соединение по ненадобности.
Break; // поскольку все прошло удачно, выходим из цикла
except // неудача соединения
LogMessage('Ошибка подключения к SMTP-серверу. Повтор через 5 сек.', mtError); //Это моя процедура для регистрации событий в журнале
StartTime := GetTickCount; //Организуем цикл ожидания
repeat
Application.ProcessMessages; // Что-бы приложение не "замерзло" в процессе ожидания
until GetTickCount - StartTime > 5 * OneSec; // Собственно ждем 5 секунд
end;
Inc(TryCount);
until TryCount = 3; //Если количество попыток отправки больше 3 прекращаем попытки.