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.UserID := 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;
begin
Showbusy(true);
ShowStatus('Connecting....');
if POP.Connected then
begin
POP.Disconnect;
end;
POP.Host := Pop3ServerName;
POP.Port := Pop3ServerPort;
POP.UserID := 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;
解决方案 »
- 哪位大虾知道SpreadSheet控件???? 急等,分不多就30全奉上
- 如何修改windows的右键菜单
- 给个思路!表的例可以动态的改变!应该怎么作??!!
- 我发现我的所有端口都被占用了重启也没有用?
- 如何在程序中得到DataBase连接的数据库类型(急)
- 求《可视化OPENGL程序设计》配书内容
- 在StringGrid 画控件的问题
- 数据库中有以字段是5位小数0.21875,调出来怎么是0.21880了????
- 如果我用MS自带的MediaPlay播放.Wav文件,需要传入一个为字符类型的表示文件名称的参数,如果我把声音文件已经编译成资源文件了,该怎么调用!?
- 小白求问TCP协议相关问题,求大佬们帮助
- 怎样COPY数据库
- 到底光盘的全文检索是如何作的?
*
* Project : MailDemo
* Unit Name: Main
* Purpose :
* Version : 1.0
* Date : Sat 21 Apr 2001 - 15:54:11
* Author : Hadi Hari <[email protected]>
* History :
*
****************************************************************}unit Main;interfaceuses
Graphics, Controls, Forms, Dialogs, Grids, Menus, ComCtrls, StdCtrls,
ExtCtrls, ActnList, ImgList, Buttons, Windows, Messages,
SysUtils, Classes, FileCtrl, IdSMTP, IdComponent,
IdTCPConnection, IdTCPClient, IdMessageClient, IdPOP3, IdBaseComponent,
IdMessage, ToolWin, IdAntiFreezeBase, IdAntiFreeze;type
TfrmMain = class(TForm)
ActionList1: TActionList;
Actions1: TMenuItem;
Button1: TBitBtn;
Cc: TLabel;
CheckMail: TAction;
Checkmail1: TMenuItem;
Date: TLabel;
Delete: TAction;
Deletecurrentmessage1: TMenuItem;
Disconnect: TAction;
Disconnect1: TMenuItem;
Exit1: TMenuItem;
From: TLabel;
IdAntiFreeze1: TIdAntiFreeze;
ImageList1: TImageList;
Label1: TLabel;
Label10: TLabel;
Label11: TLabel;
Label4: TLabel;
Label5: TLabel;
Label6: TLabel;
Label7: TLabel;
Label8: TLabel;
Label9: TLabel;
lvHeaders: TListView;
lvMessageParts: TListView;
MainMenu1: TMainMenu;
Memo1: TMemo;
Msg: TIdMessage;
N2: TMenuItem;
N3: TMenuItem;
Organization: TLabel;
Panel1: TPanel;
pnlBottom: TPanel;
pnlBottomBottom: TPanel;
pnlMain: TPanel;
pnlAttachments: TPanel;
pnlServerName: TPanel;
pnlTop: TPanel;
POP: TIdPOP3;
Priority: TLabel;
Purge: TAction;
Purgeedmessages1: TMenuItem;
Receipt: TLabel;
Recipients: TLabel;
Retrieve: TAction;
Retrievecurrentmessage1: TMenuItem;
SaveDialog1: TSaveDialog;
Send: TAction;
Send1: TMenuItem;
Setup: TAction;
Setup1: TMenuItem;
Splitter1: TSplitter;
StatusBar1: TStatusBar;
StatusBar2: TStatusBar;
Subject: TLabel;
ToolBar1: TToolBar;
ToolButton1: TToolButton;
ToolButton10: TToolButton;
ToolButton11: TToolButton;
ToolButton12: TToolButton;
ToolButton2: TToolButton;
ToolButton3: TToolButton;
ToolButton4: TToolButton;
ToolButton5: TToolButton;
ToolButton6: TToolButton;
ToolButton7: TToolButton;
ToolButton8: TToolButton;
ToolButton9: TToolButton;
Selectfromdeletion1: TMenuItem;
function FindAttachment(stFilename: string): integer;
procedure Button1Click(Sender: TObject);
procedure CheckMailExecute(Sender: TObject);
procedure DeleteExecute(Sender: TObject);
procedure DisconnectExecute(Sender: TObject);
procedure Exit1Click(Sender: TObject);
procedure FormActivate(Sender: TObject);
procedure FormClose(Sender: TObject; var Action: TCloseAction);
procedure FormCreate(Sender: TObject);
procedure lvMessagePartsClick(Sender: TObject);
procedure pnlServerNameClick(Sender: TObject);
procedure PurgeExecute(Sender: TObject);
procedure RetrieveExecute(Sender: TObject);
procedure SendExecute(Sender: TObject);
procedure SetupExecute(Sender: TObject);
procedure ShowBusy(blBusy: boolean);
procedure ShowFileStatus;
procedure ShowStatus(stStatus: string);
procedure lvHeadersDblClick(Sender: TObject);
procedure Selectfromdeletion1Click(Sender: TObject);
private
{ Private declarations }
procedure RetrievePOPHeaders(inMsgCount: Integer);
procedure ResetHeadersGrid;
procedure ToggleStatus(const Status: Boolean);
procedure ReadConfiguration;
public
{ Public declarations }
FAttachPath: string;
FMsgCount, FMailBoxSize: integer;
end;var
frmMain: TfrmMain;
Pop3ServerName: string;
Pop3ServerPort: Integer;
Pop3ServerUser: string;
Pop3ServerPassword: string;
SmtpServerName: string;
SmtpServerPort: Integer;
SmtpServerUser: string;
SmtpServerPassword: string;
SmtpAuthType: Integer;
UserEmail: string;implementationuses Setup, MsgEditor, IniFiles; //, smtpauth;{$IFDEF MSWINDOWS}{$R *.dfm}{$ELSE}{$R *.xfm}{$ENDIF}procedure TfrmMain.ShowBusy(blBusy: boolean);
begin
if blBusy then
screen.cursor := crHourglass
else
screen.cursor := crDefault;
end; (* *)procedure TfrmMain.ShowStatus(stStatus: string);
begin
Statusbar1.Panels[1].text := stStatus;
StatusBar1.Refresh;
end; (* *)procedure TfrmMain.ShowFileStatus;
begin
Statusbar2.Panels[0].text := IntToStr(FMsgCount);
Statusbar2.Panels[1].text := format('Mail takes up %dK on the server',
[FMailBoxSize]);
StatusBar1.Refresh;
end; (* *)function TfrmMain.FindAttachment(stFilename: string): integer;
var
intIndex: Integer;
found: boolean;
begin
intIndex := -1;
result := -1;
if (Msg.MessageParts.Count < 1) then
exit; //no attachments (or anything else)
found := false;
stFilename := uppercase(stFilename);
repeat
inc(intIndex);
if (Msg.MessageParts.Items[intIndex] is TIdAttachment) then
begin //general attachment
if stFilename =
uppercase(TIdAttachment(Msg.MessageParts.Items[intIndex]).Filename) then
found := true;
end;
until found or (intIndex > Pred(Msg.MessageParts.Count));
if found then
result := intIndex
else
result := -1;
end; (* *)procedure TfrmMain.Button1Click(Sender: TObject);
var
intIndex: integer;
fname: string;
intMSGIndex: integer;
begin
// Find selected
for intIndex := 0 to lvMessageParts.Items.Count - 1 do
if lvMessageParts.Items[intIndex].Selected then
begin
//now find which TIdAttachment it is in MSG
intMSGIndex := FindAttachment(lvMessageParts.Items[intIndex].caption);
if intMSGIndex > 0 then
begin
fname := FAttachPath +
TIdAttachment(Msg.MessageParts.Items[intMSGIndex]).filename;
SaveDialog1.FileName := fname;
if SaveDialog1.Execute then
begin
Showbusy(true);
TIdAttachment(Msg.MessageParts.Items[intMSGIndex]).SaveToFile(SaveDialog1.FileName);
Showbusy(false);
end;
end;
end;
end;procedure TfrmMain.RetrievePOPHeaders(inMsgCount: Integer);
var
stTemp: string;
intIndex: integer;
itm: TListItem;
begin
stTemp := Statusbar1.Panels[1].text;
lvHeaders.Items.Clear;
for intIndex := 1 to inMsgCount do
begin
// Clear the message properties
ShowStatus(format('Messsage %d of %d', [intIndex, inMsgCount]));
Application.ProcessMessages;
Msg.Clear;
POP.RetrieveHeader(intIndex, Msg);
// Add info to ListView
itm := lvHeaders.Items.Add;
itm.ImageIndex := 5;
itm.Caption := Msg.Subject;
itm.SubItems.Add(Msg.From.Text);
itm.SubItems.Add(DateToStr(Msg.Date));
itm.SubItems.Add(IntToStr(POP.RetrieveMsgSize(intIndex)));
itm.SubItems.Add('n/a');
// itm.SubItems.Add(POP.RetrieveUIDL(intIndex));
end;
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.UserID := 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);
var
i: Integer;
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
for i := 0 to Msg.MessageParts.Count - 1 do begin
if Msg.MessageParts.Items[i] is TIdAttachment then begin
if SaveDialog1.Execute then
TIdAttachment(Msg.MessageParts.Items[i]).SaveToFile(
SaveDialog1.FileName);
break;
end;
end;
end;
end;
end;
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 := IncludeTrailingBackSlash(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', '[email protected]');
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.