![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как написать прогу для получения писем с сервера? [D7, WinXP]
Николай © (2004-06-07 15:52:00)Как написать прогу для автоматического получения писем с сервера, чтобы потом из них можно было выбрать нужную информацию?
Rouse_ (2004-06-08 07:47:00) [1]Проинсталируй dclsockets70.bpl из папки C:\Program Files\Borland\Delphi7\Bin (ну или где у тебя там Дельфи находится) - появится на вкладке Internet
Николай (2004-06-07 20:57:00) [2]На какой вкладке расположен TClientSocket и есть ли он в Delphi7 вообще?
Rouse_ (2004-06-07 17:56:00) [3]Вот тебе пример получения информации о кол-ве писем на сервере и по желанию их удаления...
Соответственно, читаешь те ссылки что тебе привели и модифицируй код по своему образу и подобию:
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);
private
{ Private declarations }
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.
Digitman (2004-06-07 17:22:00) [4]
> Николай (07.06.04 17:19) [5]
например, TIdPOP3 в составе Indy-компонентов
Николай (2004-06-07 17:19:00) [5]А ссылки на готовые компоненты не подскажите?
Anatoly Podgoretsky (2004-06-07 17:12:00) [6]Николай (07.06.04 16:49) [2]
Идея тоже простая, запускаешь Дельфи и используешь ее редактор.
Digitman (2004-06-07 16:55:00) [7]
> Николай (07.06.04 16:49) [2]
идея проста до безобразия - идешь на http://book.itep.ruи внимательным образом изучаешь протокол POP3 (или IMAP, если требуется), далее либо реализуешь в коде требуемые части протокола либо ищешь готовые компоненты, реализующие то же самое
Николай (2004-06-07 16:49:00) [8]Хотя бы идею, в общих чертах...
Digitman (2004-06-07 15:58:00) [9]на вопрос "как написАть.." иного ответа нежели "головой и руками" нет и быть не может