📄 readmaildemomain.pas
字号:
unit ReadMailDemoMain;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
ExtCtrls, StdCtrls, ComCtrls, JclMapi;
type
TForm1 = class(TForm)
HeadersListView: TListView;
PreviewRichEdit: TRichEdit;
Splitter1: TSplitter;
AttachmentsListBox: TListBox;
procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject);
procedure HeadersListViewSelectItem(Sender: TObject; Item: TListItem;
Selected: Boolean);
procedure HeadersListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
private
Email: TJclEmail;
public
procedure PrevievMessage(const SeedMessageID: string);
procedure ReadHeaders;
end;
var
Form1: TForm1;
implementation
{$R *.DFM}
uses
Mapi, // MAPI_UNREAD constant
JclSysUtils;
procedure TForm1.FormCreate(Sender: TObject);
begin
Email := TJclEmail.Create;
ReadHeaders;
end;
procedure TForm1.FormDestroy(Sender: TObject);
begin
FreeAndNil(Email);
end;
procedure TForm1.PrevievMessage(const SeedMessageID: string);
var
HeaderLinesCount: Integer;
begin
with PreviewRichEdit do
begin
Lines.BeginUpdate;
try
Lines.Clear;
// Set SeedMessageID before reading
Email.SeedMessageID := SeedMessageID;
Email.Read;
HeaderLinesCount := Email.MessageReport(Lines);
// Message header part highlighting
SelStart := 0;
SelLength := SendMessage(Handle, EM_LINEINDEX, HeaderLinesCount, 0);
SelAttributes.Style := [fsBold];
SelLength := 0;
SelStart := 0;
finally
Lines.EndUpdate;
end;
end;
AttachmentsListBox.Items.Assign(Email.Attachments);
AttachmentsListBox.Visible := AttachmentsListBox.Items.Count > 0;
end;
procedure TForm1.ReadHeaders;
var
NextMessage: Boolean;
begin
// You have to be logged on before reading messages. LogOff is automatically
// called in TJclEmail destructor.
Email.LogOn;
// SimpleMAPI is limited to read messages from InBox root folder only
HeadersListView.Items.BeginUpdate;
Screen.Cursor := crHourGlass;
try
HeadersListView.Items.Clear;
NextMessage := Email.FindFirstMessage;
while NextMessage do
begin
Email.Read([roHeaderOnly]);
with HeadersListView.Items.Add do
begin
Caption := Email.Recipients.Originator.Name;
SubItems.Add(Email.Subject);
SubItems.Add(DateTimeToStr(Email.ReadMsg.DateReceived));
SubItems.Add(Email.SeedMessageID);
Data := Pointer(Email.ReadMsg.Flags); // store Flags for custom draw
end;
NextMessage := Email.FindNextMessage;
end;
finally
HeadersListView.Items.EndUpdate;
Screen.Cursor := crDefault;
end;
end;
procedure TForm1.HeadersListViewSelectItem(Sender: TObject;
Item: TListItem; Selected: Boolean);
begin
if Selected then
PrevievMessage(Item.SubItems[2]);
end;
procedure TForm1.HeadersListViewCustomDrawItem(Sender: TCustomListView;
Item: TListItem; State: TCustomDrawState; var DefaultDraw: Boolean);
begin
if DWORD(Item.Data) and MAPI_UNREAD <> 0 then
Sender.Canvas.Font.Style := [fsBold];
end;
end.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -