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