Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Сети";
Текущий архив: 2005.03.06;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.044 c
14-1108563517
Луарвик
2005-02-16 17:18
2005.03.06
Че за Faq странный???


3-1107444113
Bogdan
2005-02-03 18:21
2005.03.06
Как найти последнюю запись по дате


1-1108958278
Dido
2005-02-21 06:57
2005.03.06
Excel


1-1108625807
Niki
2005-02-17 10:36
2005.03.06
StringGrid


1-1109081445
Топпер
2005-02-22 17:10
2005.03.06
не главные формы на панели задач





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский