Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

TidSMTP [WinXP]


Страницы:   1 2

axis_of_evil ©   (2009-07-09 20:31:00) 

вопрос первый - правильно ли я понимаю принцип работы Indy?
насколько я знаю, Indy Sockets - многопоточные.
т.е. при вызове
 idSMTP1.Connect;
idSMTP1 начнет в отдельном потоке свою работу по соединению, программа (основной поток) продолжит работу.

вопрос второй - как, собственно, правильно этим компонентом пользоваться?
// в Demos почти ничего нет
пусть был вызван метод Connect()
далее поток idSMTP1 передал управление в обработчик IndySMTPStatus(ASender: TObject; const AStatus: TIdStatus;
 const AStatusText: string);
и статус говорит о том, щто мы connected
как следует поступить далее? - мне кажется, щто некорректно вызывать из IndySMTPStatus() другой метод - скажем, Send().
тогда получается, щто нужно сигналить основному потоку о своей готовности, или, выражаясь более общими словами, - метод Send () должен вызываться извне. прав ли я?


foxm66   (2009-12-21 08:51:00) [1]

>Сергей М.
А Вы уверены, что это решит проблему?
На другом форуме я нашел вот такое обсуждение:

От:  vpavel  
Дата:  05.03.07 08:23
Здравствуйте
При аттачменте в кодировке koi8-r название файла приходит в аброкозябрах.
Просмотрел форум, эта тема уже подымалась, но ответа не нашел.

Использую компонент IdSmtp Indy9 Delphi

От:  Vodyamba  
Дата:  06.03.07 03:58
Да уж... Ответ и я в своё время так и не нашел... На Indy 10... пришлось прикреплять аттачменты только с английским наименованием...

ТоО есть, мне надо найти 10-ю Indy, установить (а она встанет на Delphi 6?), а гарантии работы, получается, нет?


Сергей М.   (2009-12-18 14:25:00) [2]


> foxm66 ©   (18.12.09 10:32) [27]


Что мешает обновиться хотя бы до 9-ки, а еще лучше до 10-ки ?


foxm66   (2009-12-18 10:32:00) [3]

Вот вопрос в том и состоит, как заставить Indy правильно составлять имена.
И надеюсь на людей с хорошей памятью. ;)


Anatoly Podgoretsky   (2009-12-18 09:02:00) [4]

Никаких проблем с русскими буквами не возникает, если они составлены в соответствии с MIME - =?codepage?pack?filename?=

А Инди очень старый, вряд ли кто его еще помнит.


foxm66   (2009-12-18 08:14:00) [5]

Новая проблема. Если имя файла вложения содержит русские буквы, то возникает проблема. Причем я пробовал на BATe, он понимает нормально, но у клиентов Outlook и русские буквы там отражаются крякозябрами. Русская кодировка там не устанавливается, несмотря на явное ее задание в свойствах.
Как можно это поправить? Delphi6 Indy 8


foxm66   (2009-12-15 07:57:00) [6]

Сергей М - Спасибо! Получилось!


Сергей М.   (2009-12-11 16:46:00) [7]

Пройтись в for..downto - цикле по списку idMessage1.MessageParts, проверяя каждый элемент на принадлежность типу  TIdAttachment. В случае принадлежности проанализировать нужно ли оно, и если не нужно - удалить из списка.


foxm66   (2009-12-11 15:37:00) [8]

Такой вопрос. Мне надо отправить несколько писем со вложениями.
И вот я создал нужные вложения:
TIdAttachment.Create(idMessage1.MessageParts, FileName);
TIdAttachment.Create(idMessage1.MessageParts, FileName);
...
TIdAttachment.Create(idMessage1.MessageParts, FileName);
отправил. Все в порядке.
НО теперь мне надо отправить следующее письмо, где число вложений меньше. Как корректно удалить лишние вложения? Подскажите, пожалуйста.


Сергей М.   (2009-12-11 10:41:00) [9]


> Напиши вот так и все у тебя будет суппер


Никакого "суппера" не будет.
Грабли вместо него будут.


GazooM   (2009-12-11 10:20:00) [10]

Напиши вот так и все у тебя будет суппер!
Try
  idSMTP1.Send(IdMessage1);
Except
      if GetLastError=0 then ShowMEssage(' Письмо успешно отправлено "'+IdMessage1.Recipients.EMailAddresses+'"')
      else ShowMEssage('Возникла ошибка при отправке письма: ('+ inttostr(GetLastError) +') '+ SysErrorMessage(GetLastError));
end;


Anatoly Podgoretsky   (2009-07-13 11:59:00) [11]

Ничего странного, что не понял.
Не все решается через изсключения, кое что через возвращаемые сообщения, кое что через коды возврата. Исключения это редкая вещь при работе с Сетью и исключения это не ошибка.


axis_of_evil   (2009-07-13 10:28:00) [12]

это значит, щто я не понял, щто имел ввиду Анатолий, говоря " обработкуисключений и сообщений" - и попытался догадаться :>
// возможно, под сообщениями подразумевались отличные от windows-сообщений сообщения %>


Palladin   (2009-07-12 18:06:00) [13]


> щто значит обработка сообщений? -Application.ProcessMessages?

интересная фраза... объясни пожалуйста


axis_of_evil   (2009-07-11 03:17:00) [14]


> обработку исключений и сообщений.

т.е. каждый вызов в try..except
щто значит обработка сообщений? -Application.ProcessMessages?


Anatoly Podgoretsky   (2009-07-10 16:58:00) [15]

> axis_of_evil  (10.07.2009 16:10:14)  [14]

Корректен, только добавить обработку исключений и сообщений.
При том именно независимо.


axis_of_evil   (2009-07-10 16:10:00) [16]

остановиться щто-ли на народном варианте %>

idsmtp1.Connect;
idsmtp1.Send(idmessage1);
idsmtp1.Disconnect;

вопрос к знакомым с Indy - такой код корректен?
// если в try .. except заключить, разумеется


axis_of_evil   (2009-07-10 15:31:00) [17]

// этот код должен попросту при получении hsConnected - т.е. после
//   установления соединения отправить письмо


axis_of_evil   (2009-07-10 15:25:00) [18]

прошу прощения, забываю полную информацию выдать.

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 .. %>


Anatoly Podgoretsky   (2009-07-10 14:31:00) [19]

Откуда вдруг возникло исключение.


Сергей М.   (2009-07-10 14:18:00) [20]


> вызов send() приоводит к исключению


Какому ? Класс исключения какой ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо