![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Проверка мыла на наличие новых писем [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.