Manage Inbox
This application demonstrates how:
- How to logon to an EWS Session using a profile.
- How to get the contents of the inbox
- How to use filters to only get unread messages and/or messages of a specific person
- How to use events to respond to new and/or deleted messages
- How to create new email messages
- How to delete email messages
- How to create a reply, forward and/or forward all
- How to move a message to a different folder
- How to use the folder dialog to select a folder
Create the filter:
procedure TFrmMain.SetRestriction(Sender: TObject);
// Build a restriction and set the restriction
// The table event "OnRestrictDone" will rebuild the listview
var
RestrictionAnd: IRwEWSRestrictionAnd;
RestrictionCompare: IRwEWSRestrictionCompare;
RestrictionContent: IRwEWSRestrictionContent;
begin
Assert(Assigned(FContentTable));
if chBxSuppressReadMessages.Checked then
begin
RestrictionCompare := FContentTable.CreateRestriction(rtCompare) as IRwEWSRestrictionCompare;
RestrictionCompare.FieldDef := FLD_MESSAGE_ISREAD;
RestrictionCompare.CompareOperator := opIsEqualTo;
RestrictionCompare.Value := False;
end else
RestrictionCompare := nil;
if edtShowMessagesFrom.Text <> '' then
begin
RestrictionContent := FContentTable.CreateRestriction(rtContent) as IRwEWSRestrictionContent;
RestrictionContent.FieldDef := FLD_MESSAGE_SENDER;
RestrictionContent.ContainmentMode := cmSubstring;
RestrictionContent.ContainmentComparison := ccIgnoreCaseAndNonSpacingCharacters;
RestrictionContent.Value := edtShowMessagesFrom.Text;
end else
RestrictionContent := nil;
if Assigned(RestrictionCompare) and Assigned(RestrictionContent) then
begin
RestrictionAnd := FContentTable.CreateRestriction(rtAnd) as IRwEWSRestrictionAnd;
RestrictionAnd.AddRestriction(RestrictionCompare);
RestrictionAnd.AddRestriction(RestrictionContent);
FContentTable.Filter(RestrictionAnd);
end else
if Assigned(RestrictionCompare) then
FContentTable.Filter(RestrictionCompare)
else
if Assigned(RestrictionContent) then
FContentTable.Filter(RestrictionContent)
else
FContentTable.Filter(nil);
RebuildMessageList(Sender);
end;
Handle a deleted item:
procedure TFrmMain.EWSFolderEventsItemDeleted(
AFolder: IRwEWSFolder; const ATimeStamp: TDateTime; const AId, AParentFolderId: TItemId);
var
i: Integer;
Data: TRwListItemData;
begin
if AFolder.ID.Id = FCurrentFolder.Id.Id then
begin
for i := lvMessages.Items.Count-1 downto 0 do
begin
Data := lvMessages.Items[i].Data;
if Data.ItemId.Id = AId.Id then
begin
lvMessages.Items.Delete(i);
Break;
end;
end;
end;
end;
Create a Forward:
procedure TFrmMailMessage.actForwardExecute(Sender: TObject);
var
Response: IRwEWSSmartResponse;
begin
Response := FMessage.CreateForward();
// The response itself only contains
// a few properties which can be changed
// In order to access all the properties
// we must save it first
CreateAndShowReply(Response.SaveChanges());
end;
Screenshot:
![]() |
![]() |