оно создает новую резьбу для посылки электронная почта.
>> Может потребитель от того момента дальше сделать что-нибыдь в пределах применения?
конечно. но 2 вещи вы должны контролировать:
1. потребитель хочет прекратить от вашего применения но электронная почта все еще посылают. В этот случай вы можете прекратить резьбу или ждать свою отделку
2. не измените query1, edit1, edit2 потому что резьба использует их
>> Если ошибка происходит. Потребитель все еще будет получить это?
Да, ваша попытка/за исключением/showmessage все еще работают:
попытка
IdSMTP.Connect;
IdSMTP.Send (IdMsg);
за исключением
Showmessage («ошибка при посылке электронная почта ");
конец;
Было бы более лучше обернуть все исполняет метод в попытку/за исключением слишком как это:
процедура TEmailThread.Execute;
var IdSMTP: TIdSMTP;
IdMsg: TIdMessage;
Iий: Интежер;
начните
попытка
IdSMTP: =TIdSMTP.Create (ноли);
IdSMTP.Host: = ' my.domain.nl'; // заменяют ть вашим общительным сервером
IdSMTP.Port: =25;
IdSMTP.Username: = «MyUserName»;
IdSMTP.Password: = «MyPassword»;
попытка
если НЕ IdSMTP.Connected после этого
IdSMTP.Connect;
Для I: = 0 к Query1.Recordcount -1 делает
начните
если прекращено после этого выходите;
попытка
IdMsg: =TIdMessage.Create (ноли);
IdMsg.From.Address: = edit1.Text;
IdMsg.Subject: = edit2.text;
IdMsg.Recipients.EMailAddresses: = Query1.FieldByName («электронная почта ").Text;
Старт // некоторая функция для того чтобы персонализировать тело в клиент
IdMsg.Body.Text: = PersonalizeEmailForCustomer;
попытка
IdSMTP.Connect;
IdSMTP.Send (IdMsg);
за исключением
на e: Исключение делает
Showmessage («ошибка при посылке электронная почта: » + E.Message);
конец;
окончательно
IdMsg.Free;
конец;
Query1.Next;
конец;
окончательно
если IdSMTP.Connected после этого
IdSMTP.Disconnect;
IdSMTP.Free;
конец;
за исключением
на e: Исключение делает
Showmessage («ошибка при посылке электронная почта: » + E.Message);
конец;
конец;
>> Все еще по возможности сообщить пользователь что посылка заканчивала, показывает некоторый результат?
Вы можете использовать сообщение OnTerminate или
с TEmailThread.Create (поистине) сделайте
начните
OnTerminate: = ThreadOnTerminate;
FreeOnTerminate: = True;
Резюме;
конец;
процедура TMainForm.ThreadOnTerminate (ASender: TObject);
начните
ShowMessage («сделана работа ");
конец;
>> Поэтому мне нужно передать то содержание к резьбе как-то
вы можете передать к резьбе все параметры, котор вы любите через свое конструктор. Например:
TEmailThread = тип (TThread)
приватно
FSubject: шнур;
защищено
процедура исполняет; преодоление автоматического действия;
публика
конструктор создается (const ASubject: шнур);
конец;
конструктор TEmailThread.Create (const ASubject: шнур);
начните
унаследовано создайтесь (True);
FSubject: = ASubject;
конец;
процедура TEmailThread.Execute;
…
// using местный var
IdMsg.Subject: = FSubject; // было IdMsg.Subject: = edit2.text;