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

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

Проверка мыла на наличие новых писем [D5, WinXP]


Ramon ©   (2004-10-22 15:36:00) 

Как проверить не пришло ли что-нибудь,и если пришло,то как забрать?


Rouse_   (2004-10-22 21:37:00) [1]

Когда то давным давно, когда инет был очень тяжелый и за одну сессию письма не выкачивались из ящика по причине разрыва соединения, наваял я для себя сей манускрипт, который смотрел количество писем в ящике и при желании сносил их от туда:

unit Unit1;

interface

uses
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, ScktComp;

type
 TForm1 = class(TForm)
   Edit1: TEdit;
   Edit3: TEdit;
   Label1: TLabel;
   Label2: TLabel;
   GroupBox1: TGroupBox;
   Button1: TButton;
   Memo1: TMemo;
   ClientSocket1: TClientSocket;
   Edit2: TEdit;
   Label3: TLabel;
   Button2: TButton;
   Label4: TLabel;
   Edit4: TEdit;
   Button3: TButton;
   procedure Button1Click(Sender: TObject);
   procedure ClientSocket1Read(Sender: TObject; Socket: TCustomWinSocket);
   procedure ClientSocket1Connect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure ClientSocket1Disconnect(Sender: TObject;
     Socket: TCustomWinSocket);
   procedure Button2Click(Sender: TObject);
   procedure Edit4KeyPress(Sender: TObject; var Key: Char);
   procedure ClientSocket1Error(Sender: TObject; Socket: TCustomWinSocket;
     ErrorEvent: TErrorEvent; var ErrorCode: Integer);
   procedure Button3Click(Sender: TObject);
 public
   Step: Integer;
   MailCount: Integer;
   CurrentMail: Integer;
   NoDel: Boolean;
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
 NoDel := True;
 Step := 0;
 Memo1.Lines.Clear;
 ClientSocket1.Host := Edit1.Text;
 try
   ClientSocket1.Port := StrToInt(Edit4.Text);
 except
   Memo1.Lines.Add('Неверный порт');
   Exit;
 end;
 ClientSocket1.Active := True;
 Memo1.Lines.Add('Соединяюсь с ' + Edit1.Text);
 Edit1.Enabled := False;
 Edit2.Enabled := False;
 Edit3.Enabled := False;
 Edit4.Enabled := False;
end;

procedure TForm1.Button3Click(Sender: TObject);
begin

 if MessageBoxEx(Handle, 'Удалить все письма из почтового ящика?',
   'Подтверждение...', MB_YESNO + MB_ICONQUESTION + MB_DEFBUTTON2,
   LANG_NEUTRAL) = IDNO then Exit;

 NoDel := False;
 Step := 0;
 Memo1.Lines.Clear;
 ClientSocket1.Host := Edit1.Text;
 try
   ClientSocket1.Port := StrToInt(Edit4.Text);
 except
   Memo1.Lines.Add('Неверный порт');
   Exit;
 end;
 ClientSocket1.Active := True;
 Memo1.Lines.Add('Соединяюсь с ' + Edit1.Text);
 Edit1.Enabled := False;
 Edit2.Enabled := False;
 Edit3.Enabled := False;
 Edit4.Enabled := False;
end;

procedure TForm1.ClientSocket1Read(Sender: TObject;
 Socket: TCustomWinSocket);
var
 Txt: String;
 Parser: TStringList;
begin
 Txt := Socket.ReceiveText;
 //Memo1.Lines.Add('<<< '+Txt);

 if Txt[1] = '-' then
 begin
   Memo1.Lines.Add('Ошибка!!!');
   Socket.SendText('QUIT');
   ClientSocket1.Active := False;
   MailCount := 0;
   CurrentMail := 0;
   Step := 0;
   Exit;
 end;

 if Txt[1] <> '+' then Exit;

 case Step of
   0:
   begin
     Inc(Step);
     Memo1.Lines.Add('Аутентификация:'+#13#10+#13#10+'Отправка имени пользователя...');
     Txt := 'USER ' + Edit2.Text + #10#13;
     Socket.SendText(Txt);
   end;
   1:
   begin
     Inc(Step);
     Memo1.Lines.Add('Отправка пароля...');
     Txt := 'PASS ' + Edit3.Text + #10#13;
     Memo1.Lines.Add('>>> '+Txt);
     Socket.SendText(Txt);
   end;
   2:
   begin
     Memo1.Lines.Add('Аутентификация успешна');
     Inc(Step);
     Memo1.Lines.Add('Получения количества писем...');
     Txt := 'STAT' + #10#13;
     Socket.SendText(Txt);
   end;
   3:
   begin
     Parser := TStringList.Create;
     Parser.Text := StringReplace(Txt, ' ', #13#10, [rfReplaceAll]);
     MailCount := StrToInt(Parser.Strings[1]);
     if MailCount = 0 then
     begin
       Memo1.Lines.Add('Письма в почтовом ящике отсутствуют');
       ClientSocket1.Active := False;
       Exit;
     end;
     Memo1.Lines.Add('Писем в почтовом ящике: ' + Parser.Strings[1]);
     Memo1.Lines.Add('Их общий размер: ' + Parser.Strings[2] + #13#10);
     Parser.Free;
     if NoDel then
     begin
       ClientSocket1.Active := False;
       Exit;
     end;
     Inc(Step);
     CurrentMail := 1;
     Memo1.Lines.Add('Приступаю к удалению...');
     Memo1.Lines.Add('Запрос на удаление письма №' + IntToStr(CurrentMail) + '...');
     Txt := 'DELE ' + IntToStr(CurrentMail) + #10#13;
     Socket.SendText(Txt);
   end;
   4:
   begin
     Memo1.Lines.Add('Принят');
     if CurrentMail < MailCount then
     begin
       Inc(CurrentMail);
       Memo1.Lines.Add('Запрос на удаление письма №' + IntToStr(CurrentMail) + '...');
       Txt := 'DELE ' + IntToStr(CurrentMail) + #10#13;
       Socket.SendText(Txt);
     end
     else
     begin
       Inc(Step);
       Memo1.Lines.Add('Все запросы завершены');
       Memo1.Lines.Add('Подтверждаю удаление...');
       Txt := 'QUIT' + #10#13;
       Socket.SendText(Txt);
     end;
   end;
   5:
   begin
     Memo1.Lines.Add('Удаление завершено');
     Memo1.Lines.Add('Удалено писем: ' + IntToStr(MailCount));
     ClientSocket1.Active := False;
   end;
 end;
end;

procedure TForm1.ClientSocket1Connect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Memo1.Lines.Add('Соединение установлено');
end;

procedure TForm1.ClientSocket1Disconnect(Sender: TObject;
 Socket: TCustomWinSocket);
begin
 Memo1.Lines.Add('Соединение завершено');
 Edit1.Enabled := True;
 Edit2.Enabled := True;
 Edit3.Enabled := True;
 Edit4.Enabled := True;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
 ClientSocket1.Active := False;
end;

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);
begin
 if not(Key in ['0'..'9', #8]) then Key := #0;
end;

procedure TForm1.ClientSocket1Error(Sender: TObject;
 Socket: TCustomWinSocket; ErrorEvent: TErrorEvent;
 var ErrorCode: Integer);
begin
 Memo1.Lines.Add('Ошибка!!!');
 ErrorCode := 0;
end;

end.


Smithson   (2004-10-22 16:00:00) [2]

Каюсь, стормозил. Спать охота, сил нету...


Digitman   (2004-10-22 15:58:00) [3]


> Ramon


срочно дуй сюда - http://book.itep.ru,  разделы POP3, SMTP
читать-вникать до полного просветления, какой протокол и за каким хреном используется кл.стороной, а какой - серверной


Владислав   (2004-10-22 15:55:00) [4]

Компонент есть такой из библиотеки Indy. IdPOP3 называется. Ссылку указали в [1]


Ramon   (2004-10-22 15:50:00) [5]

Если честно,я не понял ничего.Можно поподробнее.И как это сделать сделать средствами делфей?


ИМХО   (2004-10-22 15:49:00) [6]

idSMTP - отправка, ему нужОн POP


Reindeer Moss Eater   (2004-10-22 15:45:00) [7]

Долго же ему смотреть придется.


Smithson   (2004-10-22 15:40:00) [8]

Поставт себе Indy ( http://www.nevrona.com/Indy/download/Files/Indy9.html) и смотри на idSMTP.


Наверх

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