如何远程登陆POP3服务器,删除邮件.谢谢
我说的是用INDY的控件

解决方案 »

  1.   

    我给你一段Demo把:
    unit UnitMain;interfaceuses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ComCtrls, ToolWin, ExtCtrls, IdBaseComponent,
      IdComponent, IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3,
      ImgList, Menus, IdMessage;type
      TFormMain = class(TForm)
        IdPOP31: TIdPOP3;
        Panel1: TPanel;
        ListViewMail: TListView;
        MainMenu1: TMainMenu;
        ImageList1: TImageList;
        StatusBar1: TStatusBar;
        ToolBar1: TToolBar;
        ToolButton1: TToolButton;
        ToolButton2: TToolButton;
        ToolButton3: TToolButton;
        ToolButton4: TToolButton;
        ToolButton5: TToolButton;
        MemoMail: TMemo;
        Splitter1: TSplitter;
        Splitter2: TSplitter;
        N1: TMenuItem;
        N2: TMenuItem;
        N3: TMenuItem;
        N4: TMenuItem;
        N5: TMenuItem;
        N6: TMenuItem;
        N7: TMenuItem;
        N8: TMenuItem;
        IdMessage1: TIdMessage;
        ListViewAttach: TListView;
        SaveDialog1: TSaveDialog;
        ToolButton6: TToolButton;
        ToolButton7: TToolButton;
        procedure N3Click(Sender: TObject);
        procedure IdPOP31Connected(Sender: TObject);
        procedure N4Click(Sender: TObject);
        procedure N5Click(Sender: TObject);
        procedure IdPOP31Disconnected(Sender: TObject);
        procedure N2Click(Sender: TObject);
        procedure N8Click(Sender: TObject);
        procedure N7Click(Sender: TObject);
        procedure ListViewMailClick(Sender: TObject);
        procedure ListViewAttachDblClick(Sender: TObject);
      private
        { Private declarations }
      public
        { Public declarations }
      end;var
      FormMain: TFormMain;implementationuses UnitConfig, UnitNewMail, Unit1;{$R *.dfm}procedure TFormMain.N3Click(Sender: TObject);
    var
      Index: Integer;
      MailSum: LongWord;
      MailItem: TListItem;
    begin
      FormConfig.ShowModal();
      //清空邮件列表
      Form1.FormStyle := fsStayOnTop;
    //  Form1.Show;
      ListViewMail.Items.Clear;
      //连接POP3服务器
      if IdPOP31.Connected then
        IdPOP31.Disconnect
      else
      begin
        IdPOP31.Host := FormConfig.EditPOP3.Text;
        IdPOP31.Port := StrToInt(FormConfig.EditPOP3Port.Text);
        IdPOP31.Username := FormConfig.EditUser.Text;
        IdPOP31.Password := FormConfig.MaskEditPw.Text;
        IdPOP31.ReadTimeout := 20000;
        IdPOP31.Connect;
        MailSum := IdPOP31.CheckMessages;
        Form1.ListBox1.Clear;
        Form1.ListBox2.Clear;
        Form1.ListBox2.Clear;
        IdPOP31.UIDL(Form1.ListBox1.Items);
        if MailSum > 0 then
          StatusBar1.SimpleText := '共有' + IntToStr(MailSum) + '封邮件'
        else
          ShowMessage('没有邮件');
        for Index := 1 to MailSum do
        begin
          IdMessage1.Clear;      IdPOP31.RetrieveHeader(Index, IdMessage1);
          //IdPOP31.UIDL(Form1.ListBox1.Items,Index);
          Form1.ListBox2.Items.Add(IdMessage1.MsgId);
          Form1.ListBox3.Items.Add(IdMessage1.UID);
          MailItem := ListViewMail.Items.Add;
          MailItem.SubItems.Add(IdMessage1.Subject);
          MailItem.SubItems.Add(IdMessage1.From.Text);
          MailItem.SubItems.Add(FormatDateTime('yyyy-mm-dd hh:mm:ss',
            IdMessage1.Date));
          MailItem.SubItems.Add(IntToStr(IdPOP31.RetrieveMsgSize(Index) div 1024) +
            'K');      IdMessage1.Clear;  
          IdPOP31.Retrieve(Index, IdMessage1);
          IdMessage1.MessageParts.CountParts;
          if IdMessage1.MessageParts.AttachmentCount > 0 then
            MailItem.ImageIndex := 5
          else
            MailItem.ImageIndex := 4;
        end;
      end;
    end;procedure TFormMain.IdPOP31Connected(Sender: TObject);
    begin
      StatusBar1.SimpleText := '已和服务器建立连接';
    end;procedure TFormMain.N4Click(Sender: TObject);
    var
      i: Integer;
    begin
      for i := 0 to ListViewMail.Items.Count-1 do
        if ListViewMail.Items.Item[i].Checked then
          //注意邮件序号从1开始
          IdPOP31.Delete(i + 1);
    end;procedure TFormMain.N5Click(Sender: TObject);
    begin
      IdPOP31.Disconnect();
      ListViewMail.Items.Clear;
      MemoMail.Lines.Clear;
      ListViewAttach.Items.Clear;
    end;procedure TFormMain.IdPOP31Disconnected(Sender: TObject);
    begin
      StatusBar1.SimpleText := '服务器已经断开';
    end;procedure TFormMain.N2Click(Sender: TObject);
    begin
      FormConfig.ShowModal;
      FormNewMail.Show;
    end;procedure TFormMain.N8Click(Sender: TObject);
    begin
      Close;
    end;procedure TFormMain.N7Click(Sender: TObject);
    begin
      FormConfig.ShowModal;
    end;procedure TFormMain.ListViewMailClick(Sender: TObject);
    var
      Index: Integer;
      AttachItem: TListItem;
    begin
      MemoMail.Lines.Clear;
      ListViewAttach.Items.Clear;
      IdMessage1.Clear;
      IdMessage1.ContentType := 'multipart/*';  StatusBar1.SimpleText := '开始接收邮件';
      IdPOP31.Retrieve(ListViewMail.ItemIndex + 1, IdMessage1);
      StatusBar1.SimpleText := '接收完毕';  MemoMail.Lines := IdMessage1.Body;
      for Index := 0 to Pred(IdMessage1.MessageParts.Count) do
      begin
        if IdMessage1.MessageParts.Items[Index] is TIdAttachment then
        begin
          AttachItem := ListViewAttach.Items.Add;
          AttachItem.Caption := IntToStr(Index);
          AttachItem.SubItems.Add(TIdAttachment(IdMessage1.MessageParts.Items[Index]).Filename);
        end
        else if IdMessage1.MessageParts.Items[Index] is TIdText then
        begin //body text
          MemoMail.Lines.Clear;
          MemoMail.Lines.AddStrings(
            TIdText(IdMessage1.MessageParts.Items[Index]).Body);
        end;
        IdMessage1.SaveToFile('d:\fjj'+inttostr(Index)+'.eml');
      end;
    end;procedure TFormMain.ListViewAttachDblClick(Sender: TObject);
    var
      Index: Integer;
    begin
      Index := StrToInt(ListViewAttach.ItemFocused.Caption);
      if SaveDialog1.Execute then
      TIdAttachment(IdMessage1.MessageParts.Items[Index]).SaveToFile(SaveDialog1.FileName);
    end;end.//-----------------------------------------------------------------------
    要删除邮件可以直接用IdPOP31.Delete