📄 main.pas
字号:
ShowStatus(stTemp);
end;
procedure TfrmMain.ResetHeadersGrid;
begin
lvHeaders.Items.Clear;
end;
procedure TfrmMain.FormActivate(Sender: TObject);
begin
{Set up authentication dialog-box}
// frmSMTPAuthentication.cboAuthType.ItemIndex := Ord( frmMessageEditor.SMTP.AuthenticationType );
// frmSMTPAuthentication.edtAccount.Text := fmSetup.Account.Text;
// frmSMTPAuthentication.edtPassword.Text := fmSetup.Password.Text;
// frmSMTPAuthentication.EnableControls;
ResetHeadersGrid;
ToggleStatus(False);
end;
procedure TfrmMain.ToggleStatus(const Status: Boolean);
begin
CheckMail.Enabled := not Status;
Retrieve.Enabled := Status;
Delete.Enabled := Status;
Purge.Enabled := Status;
Disconnect.Enabled := Status;
if Status then
ShowStatus('Connected')
else
ShowStatus('Not connected');
end;
procedure TfrmMain.FormClose(Sender: TObject; var Action: TCloseAction);
begin
Disconnect.Execute;
end;
procedure TfrmMain.CheckMailExecute(Sender: TObject);
begin
Showbusy(true);
ShowStatus('Connecting....');
if POP.Connected then
begin
POP.Disconnect;
end;
POP.Host := Pop3ServerName;
POP.Port := Pop3ServerPort;
POP.Username := Pop3ServerUser;
POP.Password := Pop3ServerPassword;
POP.Connect;
ToggleStatus(True);
FMsgCount := POP.CheckMessages;
FMailBoxSize := POP.RetrieveMailBoxSize div 1024;
ShowFileStatus;
if FMsgCount > 0 then
begin
ShowFileStatus;
RetrievePOPHeaders(FMsgCount);
end
else
begin
ShowStatus('No messages on server');
end;
Showbusy(false);
end;
procedure TfrmMain.RetrieveExecute(Sender: TObject);
var
stTemp: string;
intIndex: Integer;
li: TListItem;
begin
stTemp := Statusbar1.Panels[1].text;
if lvHeaders.Selected = nil then
begin
Exit;
end;
//initialise
Showbusy(true);
Msg.Clear;
Memo1.Clear;
lvMessageParts.Items.Clear;
From.Caption := '';
Cc.Caption := '';
Subject.Caption := '';
Date.Caption := '';
Receipt.Caption := '';
Organization.Caption := '';
Priority.Caption := '';
pnlAttachments.visible := false;
//get message and put into MSG
ShowStatus('Retrieving message "' + lvHeaders.Selected.SubItems.Strings[3] + '"');
POP.Retrieve(lvHeaders.Selected.Index + 1, Msg);
statusbar1.Panels[0].text := lvHeaders.Selected.SubItems.Strings[3];
//Setup fields on screen from MSG
From.Caption := Msg.From.Text;
Recipients.Caption := Msg.Recipients.EmailAddresses;
Cc.Caption := Msg.CCList.EMailAddresses;
Subject.Caption := Msg.Subject;
Date.Caption := FormatDateTime('dd mmm yyyy hh:mm:ss', Msg.Date);
Receipt.Caption := Msg.ReceiptRecipient.Text;
Organization.Caption := Msg.Organization;
Priority.Caption := IntToStr(Ord(Msg.Priority) + 1);
//Setup attachments list
ShowStatus('Decoding attachments (' + IntToStr(Msg.MessageParts.Count) + ')');
for intIndex := 0 to Pred(Msg.MessageParts.Count) do
begin
if (Msg.MessageParts.Items[intIndex] is TIdAttachment) then
begin //general attachment
pnlAttachments.visible := true;
li := lvMessageParts.Items.Add;
li.ImageIndex := 8;
li.Caption := TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename;
li.SubItems.Add(TIdAttachment(Msg.MessageParts.Items[intIndex]).ContentType);
end
else
begin //body text
if Msg.MessageParts.Items[intIndex] is TIdText then
begin
Memo1.Lines.Clear;
Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[intIndex]).Body);
end
end;
end;
ShowStatus(stTemp);
Showbusy(false);
end;
procedure TfrmMain.DeleteExecute(Sender: TObject);
begin
if lvHeaders.Selected <> nil then
begin
Showbusy(true);
POP.Delete(lvHeaders.Selected.Index + 1);
lvHeaders.Selected.ImageIndex := 3;
Showbusy(false);
end;
end;
procedure TfrmMain.PurgeExecute(Sender: TObject);
begin
POP.Disconnect;
ToggleStatus(False);
CheckMailExecute(Sender);
end;
procedure TfrmMain.DisconnectExecute(Sender: TObject);
begin
if POP.Connected then
begin
try
POP.Reset;
except
ShowStatus('Your POP server doesn''t have Reset feature');
end;
POP.Disconnect;
ToggleStatus(False);
end;
end;
procedure TfrmMain.SetupExecute(Sender: TObject);
begin
Application.CreateForm(TfmSetup, fmSetup);
fmSetup.ShowModal;
end;
procedure TfrmMain.SendExecute(Sender: TObject);
begin
frmMessageEditor.ShowModal;
end;
procedure TfrmMain.lvMessagePartsClick(Sender: TObject);
begin
{display message parts we selected}
if lvMessageParts.Selected <> nil then
begin
if lvMessageParts.Selected.Index > Msg.MessageParts.Count then
begin
MessageDlg('Unknown index', mtInformation, [mbOK], 0);
end
else
begin
showmessage(TIdAttachment(Msg.MessageParts.Items[lvMessageParts.Selected.Index]).Filename);
end;
end;
end;
// Memo1.Lines.AddStrings(TIdText(Msg.MessageParts.Items[lvMessageParts.Selected.Index]).Body);
procedure TfrmMain.Exit1Click(Sender: TObject);
begin
close;
end;
procedure TfrmMain.FormCreate(Sender: TObject);
begin
// read the configuration from ini file
ReadConfiguration;
name := 'frmMain';
//setup path to put attachments into
FAttachPath := IncludeTrailingPathDelimiter(ExtractFileDir(Application.exename)); //starting directory
FAttachPath := FAttachPath + 'Attach\';
if not DirectoryExists(FAttachPath) then ForceDirectories(FAttachPath);
FMsgCount := 0; FMailBoxSize := 0;
Showbusy(false);
end;
procedure TfrmMain.pnlServerNameClick(Sender: TObject);
begin
SetupExecute(Sender); //show setup screen
end;
procedure TfrmMain.ReadConfiguration;
var
MailIni: TIniFile;
begin
MailIni := TIniFile.Create(ExtractFilePath(ParamStr(0)) + 'Mail.ini');
with MailIni do begin
Pop3ServerName := ReadString('Pop3', 'ServerName', 'pop3.server.com');
Pop3ServerPort := StrToInt(ReadString('Pop3', 'ServerPort', '110'));
Pop3ServerUser := ReadString('Pop3', 'ServerUser', 'your_login');
Pop3ServerPassword := ReadString('Pop3', 'ServerPassword', 'your_password');
SmtpServerName := ReadString('Smtp', 'ServerName', 'smtp.server.com');
SmtpServerPort := StrToInt(ReadString('Smtp', 'ServerPort', '25'));
SmtpServerUser := ReadString('Smtp', 'ServerUser', 'your_login');
SmtpServerPassword := ReadString('Smtp', 'ServerPassword', 'your_password');
SmtpAuthType := ReadInteger('Smtp', 'SMTPAuthenticationType', 0);
UserEmail := ReadString('Email', 'PersonalEmail', 'someaddress@somewhere.com');
end;
MailIni.Free;
end;
procedure TfrmMain.lvHeadersDblClick(Sender: TObject);
begin
RetrieveExecute(Sender);
end;
procedure TfrmMain.Selectfromdeletion1Click(Sender: TObject);
var i : integer;
begin
for i := 0 to lvHeaders.Items.Count - 1 do
begin
Showbusy(true);
POP.Delete(i+1);
lvHeaders.Items[i].ImageIndex := 3;
Showbusy(false);
end;
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -