unit Main;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  WinSock, StdCtrls, ExtCtrls, Spin, Menus, ShellAPI, ScktComp;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Panel1: TPanel;
    btnConnect: TButton;
    cbMailes: TComboBox;
    btnTop: TButton;
    edPOPServer: TEdit;
    Label1: TLabel;
    edLogin: TEdit;
    Label2: TLabel;
    Label3: TLabel;
    edPassword: TEdit;
    btnLogin: TButton;
    btnMail: TButton;
    btnLogOut: TButton;
    btnList: TButton;
    Label4: TLabel;
    btnDelete: TButton;
    Label5: TLabel;
    btnClear: TButton;
    MainMenu1: TMainMenu;
    N1: TMenuItem;
    N4: TMenuItem;
    SaveDialog1: TSaveDialog;
    OpenDialog1: TOpenDialog;
    ClientSocket1: TClientSocket;
    Button1: TButton;
    procedure Button1Click(Sender: TObject);
    procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
    procedure btnConnectClick(Sender: TObject);
    procedure btnTopClick(Sender: TObject);
    procedure btnLoginClick(Sender: TObject);
    procedure btnListClick(Sender: TObject);
    procedure btnLogOutClick(Sender: TObject);
    procedure btnDeleteClick(Sender: TObject);
    procedure btnMailClick(Sender: TObject);
    procedure btnClearClick(Sender: TObject);
    procedure N4Click(Sender: TObject);
    procedure N2Click(Sender: TObject);
    procedure N5Click(Sender: TObject);
    procedure N6Click(Sender: TObject);
    procedure RFC1Click(Sender: TObject);
    procedure N9Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  last_cmd:string;
  mcount:integer;
implementation

uses  RussianCodeTables;

{$R *.DFM}
procedure TForm1.btnConnectClick(Sender: TObject);
begin
cbMailes.Items.Clear;
Memo1.Lines.Add('Инициализирую поддержку сокетов...');
ClientSocket1.Host:=edPOPServer.Text;
ClientSocket1.Port:=110;
try
ClientSocket1.open;
Memo1.Lines.Add('ОK! Поддержка сокетов инициализирована!');
except
 on e: exception do
    begin
       Memo1.Lines.Add(e.ClassName+'>>'+e.Message);
Memo1.Lines.Add('Ошибка! Поддержка сокетов не инициализирована!');
    end;

end;
Application.ProcessMessages;

Application.ProcessMessages;

btnLogin.Enabled:=True;
btnLogOut.Enabled:=True;
end;

procedure TForm1.btnTopClick(Sender: TObject);
Var
S:String;

N:Integer;
begin

//For N:=0 To cbMailes.Items.Count -1 Do
Begin
Memo1.Lines.Add('');
cbMailes.ItemIndex:=N;
S:='Top '+cbMailes.Text+' '+IntToStr(10);
Memo1.Lines.Add('Передаю команду:');
Memo1.Lines.Add(S);
S:=S+#13#10;
ClientSocket1.Socket.SendText(s);
Memo1.Lines.Add('POP3-сервер отвечает:');
End;

end;

procedure TForm1.Button1Click(Sender: TObject);
var m:integer;
begin
 cbMailes.Enabled:=(mcount>0);

For M:=1 To mcount-1 Do
cbMailes.Items.Add(IntToStr(M));
If cbMailes.Enabled Then
cbMailes.ItemIndex:=0;
btnTop.Enabled:=cbMailes.Enabled;
btnMail.Enabled:=cbMailes.Enabled;
btnDelete.Enabled:=cbMailes.Enabled;



end;

procedure TForm1.ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
var s: string;
begin
s:=Socket.ReceiveText;
if last_cmd='LIST' then
 begin
   Memo1.Clear;
 last_cmd:='LIST_begin';
 end;
Memo1.Lines.Append(s);
mcount:=Memo1.Lines.Count;
end;

procedure TForm1.btnLoginClick(Sender: TObject);
Var
S:String;
i:integer;
begin
Memo1.Lines.Add('');
Memo1.Lines.Add('Передаю команду:');
S:='USER '+edLogin.Text;
Memo1.Lines.Add(S);
S:=S+#13#10;

ClientSocket1.Socket.SendText(S);
Application.ProcessMessages;
 for I := 1 to 10 do
  begin
    Sleep(1000);
    Application.ProcessMessages;
  end;

Memo1.Lines.Add('');
S:='PASS '+edPassword.Text;
Memo1.Lines.Add('Передаю команду:');
Memo1.Lines.Add(S);
S:=S+#13#10;

ClientSocket1.Socket.SendText(S);

Memo1.Lines.Add('POP3-сервер отвечает:');
Application.ProcessMessages;
btnList.Enabled:=True;
cbMailes.Enabled:=True;
end;

procedure TForm1.btnListClick(Sender: TObject);
Var
S:String;
N,M:Integer;
begin
cbMailes.Clear;
S:='LIST';
last_cmd:='LIST';
Memo1.Lines.Add('Передаю команду:');
Memo1.Lines.Add(S);
S:=S+#13#10;

ClientSocket1.Socket.SendText(S);
Memo1.Lines.Add('POP3-сервер отвечает:');
end;

procedure TForm1.btnLogOutClick(Sender: TObject);
Var
S:String;
begin
S:='QUIT';
Memo1.Lines.Add('Передаю команду:');
Memo1.Lines.Add(S);
S:=S+#13#10;
ClientSocket1.Socket.SendText(S);
Memo1.Lines.Add('POP3-сервер отвечает:');





end;

procedure TForm1.btnDeleteClick(Sender: TObject);
Var
S:String;
N:Integer;
begin

Begin
Memo1.Lines.Add('');

cbMailes.ItemIndex:=N;
S:='DELE '+cbMailes.Text;
Memo1.Lines.Add('Передаю команду:');
Memo1.Lines.Add(S);
S:=S+#13#10;
ClientSocket1.Socket.SendText(s);
End;


end;

procedure TForm1.btnMailClick(Sender: TObject);
Var
S:String;

N:Integer;
begin


Begin
Memo1.Lines.Add('');
S:='RETR '+cbMailes.Text;
Memo1.Lines.Add('Передаю команду:');
Memo1.Lines.Add(S);
S:=S+#13#10;

ClientSocket1.Socket.SendText(s);
Memo1.Lines.Add('POP3-сервер отвечает:');
End;

end;

procedure TForm1.btnClearClick(Sender: TObject);
begin
Memo1.Lines.Clear;
end;

procedure TForm1.N4Click(Sender: TObject);
begin
Close;
end;

procedure TForm1.N2Click(Sender: TObject);
Var
FileName:String;
Ext:String;
begin
SaveDialog1.Filter:='Текст|*.txt|Письма|*.eml|Все|*.*';
If Not SaveDialog1.Execute Then Exit;
FileName:=SaveDialog1.FileName;
Case SaveDialog1.FilterIndex Of
1:Ext:='.txt';
2:Ext:='.eml';
3:Ext:='';
End;
If Not(ExtractFileExt(FileName)=Ext) Then
FileName:=FileName+Ext;
Memo1.Lines.SaveToFile(FileName);
end;

procedure TForm1.N5Click(Sender: TObject);
Var
FileName:String;
Ext:String;
Sel:TStrings;
begin
SaveDialog1.Filter:='Письма|*.eml|Все|*.*';
If Not SaveDialog1.Execute Then Exit;
FileName:=SaveDialog1.FileName;
Case SaveDialog1.FilterIndex Of
1:Ext:='.eml';
2:Ext:='';
End;
If Not(ExtractFileExt(FileName)=Ext) Then
FileName:=FileName+Ext;
Sel:=TStringList.Create;;
Sel.Add(Memo1.SelText);
Sel.SaveToFile(FileName);
Sel.Free;
end;

procedure TForm1.N6Click(Sender: TObject);
begin
If Not OpenDialog1.Execute Then Exit;
Memo1.Lines.Clear;
Memo1.Lines.LoadFromFile(OpenDialog1.FileName);
end;

procedure TForm1.RFC1Click(Sender: TObject);
Var
FileName:String;
begin
FileName:=ExtractFilePath(ParamStr(0))+'rfc 1939.txt';
ShellExecute(Handle,'open',PChar(FileName),Nil,Nil,SW_SHOWMAXIMIZED);
end;

procedure TForm1.N9Click(Sender: TObject);
Var
FileName:String;
begin
FileName:=ExtractFilePath(ParamStr(0))+'HowWork.html';
ShellExecute(Handle,'open',PChar(FileName),Nil,Nil,SW_SHOWNORMAL);
end;

end.
