Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2005.03.06;
Скачать: CL | DM;

Вниз

Indy9-SMTP-Server   Найти похожие ветки 

 
Winni   (2004-12-30 13:07) [0]

Добрый день, уважаемые мастера !

Пытаюсь понять работу SMTP-Srver. Скачал демо от Indy (ANeillans    Version: 9.0.17) и не могу понять, почему не работает подпрограммка:

procedure TForm1.IdSMTPServer1ReceiveMessageParsed(ASender: TIdCommand;
 var AMsg: TIdMessage; RCPT: TIdEMailAddressList;
 var CustomError: String);
begin
// This is the main event if you have opted to have the idSMTPServer to do your parsing for you.
// The AMessage contains the completed TIdMessage.
// NOTE: Dont forget to add IdMessage to your USES clause!

ToLabel.Caption := AMsg.Recipients.EMailAddresses;
FromLabel.Caption := AMsg.From.Text;
SubjectLabel.Caption := AMsg.Subject;
Memo1.Lines := AMsg.Body;

// Implement your file system here :)

end;

в том смысле, что ничего не появляется в лейблах и Memo1.

Беседую с этим сервером на локальной машине при помощи телнет, т е
telnet 127.0.0.1 25 <здесь он приветствует>
helo er.rt <тоже что-то говорит>
mail from:df@rt
rcpt to:rt@iu   <все эти адреса принимает, проверяет только наличие @>
data   <приглашает ввести данные>
11111
2222
.
quit  <конец>

С этой штукой долбаюсь около месяца, в 8-м Indy, теперь скачал 9-й, может, перейти на 10-й? Но раписано, что 10-й для .NET будет ли работать в D6? Могу поставить Д7, боюсь не поможет.
 
Удается решить эту задачку используя потоки, но это явно не то, что задумано индейцами. Вот как можно:

implementation
 Var SMServ:TIdSMTPServer; id:Boolean=false; Lisa: TStringList;
 mal:boolean=true; rcp:Boolean=true;  My1Sender: TIdCommand;

procedure TForm1.OnRe(ASender: TIdCommand; var VStream: TStream;
   RCPT: TIdEMailAddressList; var CustomError: string);
   var busik:string;  ii:Integer;  ch:Char;
begin
Memo3.Clear; busik:="";
for ii:=1 to VStream.Size do
 begin VStream.position:= ii-1; VStream.Read(Ch,1);
   if (ch<>#13) and (ch<>#10) then busik:=busik+Ch else
   if ch=#13 then begin
   Lisa.Add(busik);
  { Memo3.Lines.Add(busik);} busik:="";
   end;
 end; Busik:="~~ The End ~~"; Lisa.Add(busik);
{Edit1.Text:= inttostr(VStream.Size);} Id := True;
My1Sender:=ASender;
end;

Т е поток Lisa:TStringList заполняется нормально, а потом из него
заполняю файлы почтовых ящиков.

Помогите пожалуйста, нормально решить задачку.


 
aus   (2004-12-30 14:24) [1]

ReceiveMode := rmMessageParsed
Вообще посмотри какие события происходят в зависимости от ReceiveMode


 
Winni   (2004-12-30 18:47) [2]

Спасибо,Aus!
Это я не написал, но ReceiveMode = rmMessageParsed присвоено в Object Inspector. Была у меня версия, когда использовал не компонент, а модуль IdSMPTServer, там присваивал ReceiveMode := rmMessageParsed внутри TForm1.Create.


 
Winni   (2004-12-31 00:18) [3]

Всего хорошего всем в Новом Году !

Продолжаю долбить свою задачу. Но крутюсь на месте. Постаил снова Д7. Процедурка теперь такая:

procedure TForm1.IdSMTPServer1ReceiveMessageParsed(ASender: TIdCommand;
 var AMsg: TIdMessage; RCPT: TIdEMailAddressList;
 var CustomError: String);
begin
// This is the main event if you have opted to have the idSMTPServer to do your parsing for you.
// The AMessage contains the completed TIdMessage.
// NOTE: Dont forget to add IdMessage to your USES clause!
  BEEP;  {sleep(1000);beep;}
Lisa := "+"+TIdSMTPServerThread(ASender.Thread).From +"+"+
TIdSMTPServerThread(ASender.Thread).RCPTList.EMailAddresses;
ToLabel.Caption := AMsg.Recipients.EMailAddresses;
FromLabel.Caption := AMsg.From.Text;
SubjectLabel.Caption := AMsg.Subject;
Memo1.Lines := AMsg.Body;

// Implement your file system here :)

end;

При этом Lisa: String; Адреса From и To передаются нормально и
затем я делаю по щелчку кнопки:

procedure TForm1.Button1Click(Sender: TObject);
begin
 Label5.Caption:=">"+Lisa+"<";
end;

а объект AMsg видно, приходит пустой.

В модуле IdSMTPServer при этом происходит вот что:

     rmMessageParsed:
       begin
         if not Assigned(OnReceiveMessageParsed) then
           raise
             EIdTCPServerError.Create("No OnReceiveMessageParsed defined.");    {Do not Localize}
         try
           LMsg := TIdMessage.Create(Nil);
           LMsg.NoDecode := fNoDecode;
           LMsg.NoEncode := fNoEncode;
           LMsgClient := TIdMessageClient.Create(Nil);
           LMsgClient.IOHandler := ASender.Thread.Connection.IOHandler;

           LMsgClient.ProcessMessage(LMsg);
           LMsg.Headers.Values["X-Server"] := FMessages.XServer;    {Do not Localize}
           // Match RCTPList to the TO Field in msg. Difference is the BCCList.
           // Check the TO
           if TIdSMTPServerThread(ASender.Thread).RCPTList.Count > 0 then
             for x := 1 to TIdSMTPServerThread(ASender.Thread).RCPTList.Count do
             begin
               if IndyPos(TIdSMTPServerThread(ASender.Thread).RCPTList.Items[x
                 - 1].Address, LMsg.Recipients.EMailAddresses) = 0 then
               begin
                 if IndyPos(TIdSMTPServerThread(ASender.Thread).RCPTList.Items[x - 1].Address, LMsg.CCList.EMailAddresses) = 0 then
                   Lmsg.BCCList.Add.Text := TIdSMTPServerThread(ASender.Thread).RCPTList.Items[x - 1].Text;
               end;
             end;
          { Lisa:= "+"+LMsg.From.Text+"+"; }
           OnReceiveMessageParsed(ASender, LMsg, TIdSMTPServerThread(ASender.Thread).RCPTList, CustomError);
         finally
           LMsgClient.IOHandler := nil;
           FreeAndNil(LMsgClient);
           FreeAndNil(LMsg);
         end;
       end;
   end;
   CustomError := Trim(CustomError);
   if CustomError = "" then    {Do not Localize}
   begin
     ASender.Thread.Connection.WriteLn("250 " + Messages.DataReplies.EndDataReply);    {Do not Localize}
     TIdSMTPServerThread(ASender.Thread).SMTPState := idSMTPData;
   end
   else
     ASender.Thread.Connection.Writeln(CustomError);
 end
 else // No EHLO / HELO was received
   ASender.Thread.Connection.Writeln("501 " + FMessages.Greeting.NoHello);    {Do not Localize}
end;

И не пойму, что значит {Do not Localize}?



Страницы: 1 вся ветка

Текущий архив: 2005.03.06;
Скачать: CL | DM;

Наверх




Память: 0.49 MB
Время: 0.06 c
14-1108581372
Nicto
2005-02-16 22:16
2005.03.06
Кодекс от 15 февраля 2005. ( философия )


1-1109057988
Леха
2005-02-22 10:39
2005.03.06
Как изменить системную дату


14-1108048248
Def
2005-02-10 18:10
2005.03.06
Восстановление отключенного за неуплату телефона


14-1108475807
syte_ser78
2005-02-15 16:56
2005.03.06
mainmenu


1-1108743992
shodan
2005-02-18 19:26
2005.03.06
прозрачность формы, но не объектов на ней