⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 unit1.pas

📁 利用delphi的sakEmail来接收邮件
💻 PAS
字号:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ComCtrls, SakPOP3, SakMsg, ExtCtrls;

type
  TForm1 = class(TForm)
    Memo1: TMemo;
    Cnt: TButton;
    EditHost: TEdit;
    EditUserId: TEdit;
    EditPasswd: TEdit;
    ButtonNext: TButton;
    ButtonPrior: TButton;
    LabelFrom: TLabel;
    LabelTo: TLabel;
    LabelSubject: TLabel;
    SakMsgList1: TSakMsgList;
    ComboBoxAttach: TComboBox;
    Label2: TLabel;
    ButtonSave: TButton;
    SaveDialog1: TSaveDialog;
    StatusBar1: TStatusBar;
    Label1: TLabel;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Label6: TLabel;
    Label7: TLabel;
    Label9: TLabel;
    LabelDate: TLabel;
    ProgressBar2: TProgressBar;
    Label10: TLabel;
    SakPOP1: TSakPOP;
    Label11: TLabel;
    LabelReplyTo: TLabel;
    Label12: TLabel;
    LabelInReplyTo: TLabel;
    Label14: TLabel;
    LabelMsgId: TLabel;
    BtnCancel: TButton;
    Label8: TLabel;
    LabelReturnPath: TLabel;
    Label13: TLabel;
    labelContentType: TLabel;
    Label15: TLabel;
    LabelEncoding: TLabel;
    Label16: TLabel;
    LabelSender: TLabel;
    Label17: TLabel;
    LabelCC: TLabel;
    Edit1: TEdit;
    Button1: TButton;
    OpenDialog1: TOpenDialog;
    RadioGroup1: TRadioGroup;
    procedure CntClick(Sender: TObject);
    procedure ButtonPriorClick(Sender: TObject);
    procedure ButtonNextClick(Sender: TObject);
    procedure showCurrentMsg;
    procedure ButtonSaveClick(Sender: TObject);
    procedure SakPOP1AfterRetrieve(Sender: TObject);
    procedure SakPOP1DecodeProgress(Sender: TObject; Percent: Word);
    procedure SakPOP1DecodeStart(Sender: TObject; FileName: String;
      BytesCount: Integer);
    procedure SakPOP1RetrieveProgress(Sender: TObject; Percent: Word);
    procedure SakPOP1Error(Sender: TObject; Error: Integer; Msg: String);
    procedure SakPOP1BeforeRetrieve(sender: TObject; id: Word);
    procedure BtnCancelClick(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure RadioGroup1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.DFM}

var currentMsg: integer;

procedure TForm1.CntClick(Sender: TObject);
begin
//  repeat
     SakPOP1.Host := EditHost.text;
     SakPOP1.UserId := EditUserId.text;
     SakPOP1.UserPasswd := EditPasswd.text;
     SakPOP1.RecordPOPConversation := true;
     StatusBar1.Panels[0].text := 'Wait a moment, please...';
     SakPOP1.connect;
     if SakPOP1.POPError then
     begin
         MessageDlg( 'Connect failed. Maybe the server is down or not responding.',
                     mtError, [mbOk], 0);
         exit;
     end;
     if not SakPOP1.login then
     begin
          ShowMessage('Unauthorized access...');
          exit;
     end;
     //SakPOP1.Login;
     SakPOP1.Init;
     showMessage( 'You have ' + intToStr( SakPOP1.NewMsgsCount) + ' new msg(s) of ' +
                  intToStr( SakPOP1.MsgsCount));

     BtnCancel.Enabled := true;
     sakPOP1.RetrieveAllMessages( SakMsgList1);
     BtnCancel.Enabled := false;
     SakPOP1.Disconnect;
     if SakMsgList1.count > 0 then
     begin
          currentMsg := 0;
          showCurrentMsg;
     end;
     StatusBar1.Panels[0].text := 'Done. ' + intToStr( SakMsgList1.count) + ' msgs retrieved.';
//  until false;
end;


procedure TForm1.ButtonPriorClick(Sender: TObject);
begin
     if currentMsg > 0 then
     begin
          dec( currentMsg);
          showCurrentMsg;
     end;
end;

procedure TForm1.ButtonNextClick(Sender: TObject);
begin
     if currentMsg < SakMsgList1.count-1 then
     begin
          inc( currentMsg);
          showCurrentMsg;
     end;
end;

procedure TForm1.showCurrentMsg;
var msg: TSakMsg;
    i: integer;
begin
     msg := SakMsgList1.items[ currentMsg];
     labelMsgId.Caption := msg.MessageId;
     labelInReplyTo.Caption := msg.InReplyTo;
     labelFrom.caption := msg.From;
     labelTo.caption := msg.SendTo;
     labelSubject.caption := msg.Subject;
     labelDate.caption := DateToStr(msg.DT);
     labelReplyTo.Caption := msg.ReplyTo;
     labelReturnPath.Caption := msg.ReturnPath;
     labelContentType.Caption := msg.ContentType;
     LabelEncoding.Caption := msg.ContentTransferEncoding;
     LabelSender.Caption := msg.Sender;
     LabelCC.Caption := msg.CC;
     if msg.HTML.Text <> '' then
     begin
       memo1.text := msg.HTML.Text;
       RadioGroup1.ItemIndex := 0;
     end
     else
     begin
       memo1.text := msg.Text.Text;        {msg.Text is a StringList}
       RadioGroup1.ItemIndex := 1;
     end;
     if msg.AttachedFiles.Count > 0 then
        begin
          comboBoxAttach.items.clear;
          for i := 0 to msg.AttachedFiles.Count-1 do
               comboBoxAttach.items.add( msg.AttachedFiles[ i].fileName);
          comboBoxAttach.enabled := true;
          comboBoxAttach.itemIndex := 0;
          buttonSave.enabled := true;
        end
      else
        begin
          comboBoxAttach.enabled := false;
          buttonSave.enabled := false;
        end;
end;
procedure TForm1.ButtonSaveClick(Sender: TObject);
begin
     saveDialog1.FileName := comboBoxAttach.text;
     if saveDialog1.execute then
        SakMsgList1[ currentMsg].AttachedFiles[ comboBoxAttach.itemIndex].saveToFile( saveDialog1.FileName);
end;

procedure TForm1.SakPOP1AfterRetrieve(Sender: TObject);
begin
     StatusBar1.Panels[0].text := 'Retrieving... ' + intToStr( SakMsgList1.count) +
                                  ' msg(s) retrieved';
end;

procedure TForm1.SakPOP1DecodeProgress(Sender: TObject; Percent: Word);
begin
//     ProgressBar1.Position := Percent;
end;

procedure TForm1.SakPOP1DecodeStart(Sender: TObject; FileName: String;
  BytesCount: Integer);
begin
//     ProgressBar1.Position := 0;
end;


procedure TForm1.SakPOP1RetrieveProgress(Sender: TObject; Percent: Word);
begin
     ProgressBar2.Position := Percent;
end;

procedure TForm1.SakPOP1Error(Sender: TObject; Error: Integer;
  Msg: String);
begin
     ShowMessage( Msg);
end;

procedure TForm1.SakPOP1BeforeRetrieve(sender: TObject; id: Word);
begin
     ProgressBar2.Position := 0;
end;




procedure TForm1.BtnCancelClick(Sender: TObject);
begin
     SakPOP1.Cancel;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Msg : TsakMsg;
begin
  if Trim(Edit1.Text) = '' then
  begin
    if OpenDialog1.Execute then
     Edit1.Text := OpenDialog1.FileName;
  end;
  if Trim(Edit1.Text) <> '' then
  begin
    Msg := TsakMsg.Create(SakMsgList1);
    Msg.HTMLAsAttachment := true;
    Msg.LoadFromTextFile(Edit1.Text);
    SakMsgList1.Add(Msg);
    if SakMsgList1.count > 0 then
    begin
      currentMsg := 0;
      showCurrentMsg;
    end;
  end;
end;

procedure TForm1.RadioGroup1Click(Sender: TObject);
var
	Msg : TsakMsg;
begin
	Msg := SakMsgList1.items[ currentMsg];
	if RadioGroup1.ItemIndex = 0 then
	  memo1.text := msg.HTML.Text
  else
    memo1.text := msg.Text.Text;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -