Popsock.pas

unit PopSock;
{
 CrtSocket for Delphi 32
 Copyright (C) 1999-2001 Paul Toth <tothpaul@free.fr>
 <a href="http://tothpaul.free.fr
This" title="http://tothpaul.free.fr
This">http://tothpaul.free.fr
This</a> program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
}

interface
uses
 CrtSock,SysUtils;
Function OpenMailBox(Server,User,Password:string):integer;
Procedure CloseMailBox;
Function MailCount:integer;
Function GetMail(Index:integer):string;
Function MailError:string;
implementation
var
 popin,popout:TextFile;
 last:string;
 read:boolean;
Function MailError:string;
 begin
 result:=last;
 end;
Function ReadString:string;
 begin
 repeat
  readln(popin,Result);
 until (Length(Result)<4)or(Result[4]<>'-');
 last:=Result;
 end;
Procedure WriteString(s:string);
 begin
 WriteLn(popout,s);
 end;
Function Status:char;
 var
 s:string;
 begin
 s:=ReadString;
 if s='' then Status:='?' else Status:=s[1];
 end;
Function Exec(cmd:string):char;
 begin
 Writestring(cmd);
 Result:=Status;
 end;
Function OpenMailBox(Server,User,Password:string):integer;
 begin
 Result:=CallServer(Server,110);
 if Result>0 then begin
  AssignCrtSock(Result,popin,popout);
  if Status='+' then begin
  if (Exec('USER '+User)='+') and (Exec('PASS '+Password)='+') then exit;
  Disconnect(Result);
  Result:=-3;
  end else begin
  Disconnect(Result);
  Result:=-2;
  end;
 end;
 end;
Procedure CloseMailBox;
 begin
 Exec('QUIT');
 CloseFile(popout);
 end;
Function MailCount:integer;
 var
 i:integer;
 begin
 Result:=-1;
 if Exec('STAT')<>'+' then exit;
 i:=pos(' ',Last); if i=0 then exit;
 while Last[i]=' ' do inc(i);
 Result:=0;
 while (i<length(Last))and(Last[i] in ['0'..'9']) do begin
  Result:=10*Result+ord(Last[i])-ord('0');
  inc(i);
 end;
 end;
Function GetMail(Index:integer):string;
 var
 s:string;
 begin
 Writeln(popout,'RETR ',Index);
 result:='';
 if Status='+' then begin
  ReadLn(popin,s);
  while s<>'' do begin
  result:=result+s+#13#10; // header
  ReadLn(popin,s);
  end;
  Repeat
  result:=result+s+#13#10; // body
  ReadLn(popin,s);
  until s='.';
 end;
 end;
end.

Отправить комментарий

Проверка
Антиспам проверка
Image CAPTCHA
...