-
вопрос первый - правильно ли я понимаю принцип работы Indy? насколько я знаю, Indy Sockets - многопоточные. т.е. при вызове idSMTP1.Connect; idSMTP1 начнет в отдельном потоке свою работу по соединению, программа (основной поток) продолжит работу.
вопрос второй - как, собственно, правильно этим компонентом пользоваться? // в Demos почти ничего нет пусть был вызван метод Connect() далее поток idSMTP1 передал управление в обработчик IndySMTPStatus(ASender: TObject; const AStatus: TIdStatus; const AStatusText: string); и статус говорит о том, щто мы connected как следует поступить далее? - мне кажется, щто некорректно вызывать из IndySMTPStatus() другой метод - скажем, Send(). тогда получается, щто нужно сигналить основному потоку о своей готовности, или, выражаясь более общими словами, - метод Send () должен вызываться извне. прав ли я?
-
Мультипоточность, если она имеет место быть, имеется в серверных компонентах в составе Инди.
Компонент TIdSMTP к серверным компонентам в составе оного пакета отношения не имеет, ибо это компонеyn-"клиент".
-
> насколько я знаю, Indy Sockets - многопоточные.
Вообще то ни так, это вообще редкость в Инди
-
хм .. спасибо :> должно быть, перепутал
вопрос такой: // не могу понять - не из хелпа, не из гугла вызываем idSMTP1.Send(Message); как определить - щто письмо успешно доставлено?
-
idSMTP1.Connected; кто бы мог подумать ..
-
туплю, это Connect(). думаем дальше %>
-
> как определить - щто письмо успешно доставлено
Доставлено кому ? Если собственно адресату, то считай что никак.
-
> Сергей М. (10.07.2009 13:01:06) [6]
При том Кому это список.
-
> Доставлено кому ?
промежуточному почтовому серверу, который в свойствах idSMTP и прописан. я попросту запутался - вызов Send() блокирует работу, пока не отошлет или же об этом можно узнать по какому-то событию?
-
вызов send() приоводит к исключению ..
250 Requested mail action okay, completed
зачем эти черти полосатые положительынй результат в виде exception выдают .. >%>
-
> вызов send() приоводит к исключению
Какому ? Класс исключения какой ?
-
Откуда вдруг возникло исключение.
-
прошу прощения, забываю полную информацию выдать. EIdSMTPReplyError with message 'Recipient <svanpilov@inbox.ru> ok (remote) ' ErrorCode у него = 250 почему-то в коде Indy ответ с таким кодом считается за ошибку // пошурщал исходники хотя, насколько, я понял (см выше) - это хороший ответ пока не понимаю, почему попав сюда со статусом hsConnected, IdSMTP - засыпает на некоторое время. буду дальше копаться в исходниках .. procedure TfrmMain.IndySMTPStatus(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
var
Sent: Boolean;
begin
case AStatus of
hsConnected:
begin
WriteLog('SMTP status = connected; StatusText = ' + AStatusText);
Sent := True;
try
with FMailList do
WriteLog(Format('Sending mail %d of %d to address - %s', [Position+1, Count, CurrentMail]));
IndySMTP.Send(FMailMessage);
except
on E: EIdSMTPReplyError do
if not (E.ErrorCode in [250]) then
begin
WriteLog(Format('SMTP eror occured. code: %d', [E.ErrorCode]));
IndySMTP.Disconnect;
end;
on E: Exception do
begin
Sent := False;
IndySMTP.Disconnect;
end;
end;
if Sent then
begin
WriteLog('Sending e-mail done');
IndySMTP.Disconnect; end;
end;
... при вызове Send - генерируется вышеописанное исключение и IdSMTP засыпает. при закомментированном Send'е, т.е. вызове Disconnect из этого обработчика - генерируется EIdSMTPReplyError с Message, присланным локальным почтовым сервером // к сожалению, название локального почтовика - единственное, щто в сообщении этого исключения можно понять thinking .. %>
-
// этот код должен попросту при получении hsConnected - т.е. после // установления соединения отправить письмо
-
остановиться щто-ли на народном варианте %>
idsmtp1.Connect; idsmtp1.Send(idmessage1); idsmtp1.Disconnect;
вопрос к знакомым с Indy - такой код корректен? // если в try .. except заключить, разумеется
-
> axis_of_evil (10.07.2009 16:10:14) [14]
Корректен, только добавить обработку исключений и сообщений. При том именно независимо.
-
> обработку исключений и сообщений.
т.е. каждый вызов в try..except щто значит обработка сообщений? -Application.ProcessMessages?
-
> щто значит обработка сообщений? -Application.ProcessMessages?
интересная фраза... объясни пожалуйста
-
это значит, щто я не понял, щто имел ввиду Анатолий, говоря "обработку исключений и сообщений" - и попытался догадаться :> // возможно, под сообщениями подразумевались отличные от windows-сообщений сообщения %>
-
Ничего странного, что не понял. Не все решается через изсключения, кое что через возвращаемые сообщения, кое что через коды возврата. Исключения это редкая вещь при работе с Сетью и исключения это не ошибка.
|