Форум: "Сети";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
ВнизTidSMTP Найти похожие ветки
← →
axis_of_evil © (2009-07-09 20:31) [0]вопрос первый - правильно ли я понимаю принцип работы Indy?
насколько я знаю, Indy Sockets - многопоточные.
т.е. при вызове
idSMTP1.Connect;
idSMTP1 начнет в отдельном потоке свою работу по соединению, программа (основной поток) продолжит работу.
вопрос второй - как, собственно, правильно этим компонентом пользоваться?
// в Demos почти ничего нет
пусть был вызван метод Connect()
далее поток idSMTP1 передал управление в обработчик IndySMTPStatus(ASender: TObject; const AStatus: TIdStatus;
const AStatusText: string);
и статус говорит о том, щто мы connected
как следует поступить далее? - мне кажется, щто некорректно вызывать из IndySMTPStatus() другой метод - скажем, Send().
тогда получается, щто нужно сигналить основному потоку о своей готовности, или, выражаясь более общими словами, - метод Send () должен вызываться извне. прав ли я?
← →
Сергей М. © (2009-07-09 21:30) [1]Мультипоточность, если она имеет место быть, имеется в серверных компонентах в составе Инди.
Компонент TIdSMTP к серверным компонентам в составе оного пакета отношения не имеет, ибо это компонеyn-"клиент".
← →
Anatoly Podgoretsky © (2009-07-10 10:30) [2]
> насколько я знаю, Indy Sockets - многопоточные.
Вообще то ни так, это вообще редкость в Инди
← →
axis_of_evil © (2009-07-10 12:27) [3]хм .. спасибо :>
должно быть, перепутал
вопрос такой: // не могу понять - не из хелпа, не из гугла
вызываем idSMTP1.Send(Message);
как определить - щто письмо успешно доставлено?
← →
axis_of_evil © (2009-07-10 12:43) [4]idSMTP1.Connected;
кто бы мог подумать ..
← →
axis_of_evil © (2009-07-10 12:58) [5]туплю, это Connect(). думаем дальше %>
← →
Сергей М. © (2009-07-10 13:01) [6]
> как определить - щто письмо успешно доставлено
Доставлено кому ?
Если собственно адресату, то считай что никак.
← →
Anatoly Podgoretsky © (2009-07-10 13:22) [7]> Сергей М. (10.07.2009 13:01:06) [6]
При том Кому это список.
← →
axis_of_evil © (2009-07-10 13:28) [8]
> Доставлено кому ?
промежуточному почтовому серверу, который в свойствах idSMTP и прописан. я попросту запутался - вызов Send() блокирует работу, пока не отошлет или же об этом можно узнать по какому-то событию?
← →
axis_of_evil © (2009-07-10 14:00) [9]вызов send() приоводит к исключению ..
250 Requested mail action okay, completed
зачем эти черти полосатые положительынй результат в виде exception выдают .. >%>
← →
Сергей М. © (2009-07-10 14:18) [10]
> вызов send() приоводит к исключению
Какому ? Класс исключения какой ?
← →
Anatoly Podgoretsky © (2009-07-10 14:31) [11]Откуда вдруг возникло исключение.
← →
axis_of_evil © (2009-07-10 15:25) [12]прошу прощения, забываю полную информацию выдать.
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;// LaunchTimer;
end;
end;
...
при вызове Send - генерируется вышеописанное исключение и IdSMTP засыпает. при закомментированном Send"е, т.е. вызове Disconnect из этого обработчика - генерируется EIdSMTPReplyError с Message, присланным локальным почтовым сервером
// к сожалению, название локального почтовика - единственное, щто в сообщении этого исключения можно понять
thinking .. %>
← →
axis_of_evil © (2009-07-10 15:31) [13]// этот код должен попросту при получении hsConnected - т.е. после
// установления соединения отправить письмо
← →
axis_of_evil © (2009-07-10 16:10) [14]остановиться щто-ли на народном варианте %>
idsmtp1.Connect;
idsmtp1.Send(idmessage1);
idsmtp1.Disconnect;
вопрос к знакомым с Indy - такой код корректен?
// если в try .. except заключить, разумеется
← →
Anatoly Podgoretsky © (2009-07-10 16:58) [15]> axis_of_evil (10.07.2009 16:10:14) [14]
Корректен, только добавить обработку исключений и сообщений.
При том именно независимо.
← →
axis_of_evil © (2009-07-11 03:17) [16]
> обработку исключений и сообщений.
т.е. каждый вызов в try..except
щто значит обработка сообщений? -Application.ProcessMessages?
← →
Palladin © (2009-07-12 18:06) [17]
> щто значит обработка сообщений? -Application.ProcessMessages?
интересная фраза... объясни пожалуйста
← →
axis_of_evil © (2009-07-13 10:28) [18]это значит, щто я не понял, щто имел ввиду Анатолий, говоря "обработку исключений и сообщений" - и попытался догадаться :>
// возможно, под сообщениями подразумевались отличные от windows-сообщений сообщения %>
← →
Anatoly Podgoretsky © (2009-07-13 11:59) [19]Ничего странного, что не понял.
Не все решается через изсключения, кое что через возвращаемые сообщения, кое что через коды возврата. Исключения это редкая вещь при работе с Сетью и исключения это не ошибка.
← →
GazooM (2009-12-11 10:20) [20]Напиши вот так и все у тебя будет суппер!
Try
idSMTP1.Send(IdMessage1);
Except
if GetLastError=0 then ShowMEssage(" Письмо успешно отправлено ""+IdMessage1.Recipients.EMailAddresses+""")
else ShowMEssage("Возникла ошибка при отправке письма: ("+ inttostr(GetLastError) +") "+ SysErrorMessage(GetLastError));
end;
← →
Сергей М. © (2009-12-11 10:41) [21]
> Напиши вот так и все у тебя будет суппер
Никакого "суппера" не будет.
Грабли вместо него будут.
← →
foxm66 © (2009-12-11 15:37) [22]Такой вопрос. Мне надо отправить несколько писем со вложениями.
И вот я создал нужные вложения:
TIdAttachment.Create(idMessage1.MessageParts, FileName);
TIdAttachment.Create(idMessage1.MessageParts, FileName);
...
TIdAttachment.Create(idMessage1.MessageParts, FileName);
отправил. Все в порядке.
НО теперь мне надо отправить следующее письмо, где число вложений меньше. Как корректно удалить лишние вложения? Подскажите, пожалуйста.
← →
Сергей М. © (2009-12-11 16:46) [23]Пройтись в for..downto - цикле по списку idMessage1.MessageParts, проверяя каждый элемент на принадлежность типу TIdAttachment. В случае принадлежности проанализировать нужно ли оно, и если не нужно - удалить из списка.
← →
foxm66 © (2009-12-15 07:57) [24]Сергей М - Спасибо! Получилось!
← →
foxm66 © (2009-12-18 08:14) [25]Новая проблема. Если имя файла вложения содержит русские буквы, то возникает проблема. Причем я пробовал на BATe, он понимает нормально, но у клиентов Outlook и русские буквы там отражаются крякозябрами. Русская кодировка там не устанавливается, несмотря на явное ее задание в свойствах.
Как можно это поправить? Delphi6 Indy 8
← →
Anatoly Podgoretsky © (2009-12-18 09:02) [26]Никаких проблем с русскими буквами не возникает, если они составлены в соответствии с MIME - =?codepage?pack?filename?=
А Инди очень старый, вряд ли кто его еще помнит.
← →
foxm66 © (2009-12-18 10:32) [27]Вот вопрос в том и состоит, как заставить Indy правильно составлять имена.
И надеюсь на людей с хорошей памятью. ;)
← →
Сергей М. © (2009-12-18 14:25) [28]
> foxm66 © (18.12.09 10:32) [27]
Что мешает обновиться хотя бы до 9-ки, а еще лучше до 10-ки ?
← →
foxm66 © (2009-12-21 08:51) [29]>Сергей М.
А Вы уверены, что это решит проблему?
На другом форуме я нашел вот такое обсуждение:
От: vpavel
Дата: 05.03.07 08:23
Здравствуйте
При аттачменте в кодировке koi8-r название файла приходит в аброкозябрах.
Просмотрел форум, эта тема уже подымалась, но ответа не нашел.
Использую компонент IdSmtp Indy9 Delphi
От: Vodyamba
Дата: 06.03.07 03:58
Да уж... Ответ и я в своё время так и не нашел... На Indy 10... пришлось прикреплять аттачменты только с английским наименованием...
ТоО есть, мне надо найти 10-ю Indy, установить (а она встанет на Delphi 6?), а гарантии работы, получается, нет?
Страницы: 1 вся ветка
Форум: "Сети";
Текущий архив: 2013.03.22;
Скачать: [xml.tar.bz2];
Память: 0.53 MB
Время: 0.075 c