Exchange 2010 Developer Platform
Exchange Deployment Planning Services
Agenda
•
•
•
•
•
•
Exchange as a platform
Exchange Web Services
Exchange PowerShell
Exchange Transport APIs
API changes in Exchange 2010
Resources
Exchange API Evolution
1992
1995
1996
1997
1998
2000
2001
2003
2006
2009
MS Mail 3.0
Exchange 5.0
Exchange 2000 Server
Exchange 2007
• Simple MAPI
1.0
• Active Messaging
1.1 (a.k.a. CDO
1.1)
• Backup and Restore API (a.k.a.
ESEdbcli2)
• CDO for Exchange 2000 Server (CDOEx)
• CDO for Exchange Management
(CDOExM)
• CDO for Workflow
• Exchange Installable File System
• Exchange OLEDB provider (ExOLEDB)
• WSS Forms + FrontPage Extensions
• OWA URL commands
• Queue Viewer API
• Store Events
• WebDAV
• WMI classes for Exchange management
• Workflow Designer for Exchange 2000
Server
• Exchange Web
Services
• PowerShell
• Transport APIs
Exchange 4.0
Exchange 5.5
• Directory API
• Electronic Forms Designer
• Exchange Developer Kit Gateway
API
• OLE Messaging 1.0a (a.k.a. CDO
1.0a)
• Common Messaging Calls 1.0
• Collaborative Data Objects 1.2
• CDO Rendering Library
(CDOHTML)
• Event Service Agents
Exchange 5.5 SP1
• CDO 1.2.1
• Routing Objects
• HTML Forms Converter
Exchange 5.5 SP3
• Virus Scanning API
1.0
Exchange 2000
Server SP1
• Virus Scanning API
2.0
Windows 95
Exchange Server
2003
• Extended MAPI
• Virus Scanning API
2.5
NT Option Pack
4.0
• CDO for Windows NT
(CDONTS)
Windows 2000
• CDO for Windows 2000
(CDOSYS)
• SMTP Transport Events
Exchange 2010
• Exchange Web
Services
Managed API 1.0
• Remote PowerShell
The Exchange 2010 Platform
Content, Management, Control
Exchange Web Services APIs
API for interacting with Mailbox Content
• Email, Calendaring, Tasks, Contacts
• Mailbox Autodiscovery
• Authentication and Login
• Delegation and Impersonation
• Change Notifications
• User and Application Settings Configuration
PowerShell APIs
API for Exchange Management
• Mailbox creation
• Server Configuration
• Resource Management
Transport APIs
API for controlling the flow of content
• Access to message properties and content in transport
Exchange Web Services
The power of Web Services and .NET
Rich Experience
−
−
Enables full client functionality
Application logic consistent
with Outlook
Easy to Use
−
−
NEW
.NET-based EWS Managed API 1.0
Full Visual Studio support
Online-Ready
−
Single API for Server and Online
For more information:
http://msdn.microsoft.com/Exchange
5
EWS Functionality Enhancements
Exposing the full power of Exchange through the APIs
NEW
Exchange Web Services Managed API 1.0
Exchange 2010 Exchange Web Services API
Exchange 2010
Exchange Server 2007 SP1
Exchange Server 2007
• Full access to items, folders and
attachments:
• Create
• Get
• Update
• Delete
• Availability
• OOF settings
• Notifications
• Synchronization
• Name Resolution
• Distribution Lists Expansion
• Search
• Delegate management
• Folder permissions
• Public folders
• Post items
• ID conversion
NEW
• MailTips information
• Full Private Distribution List support
• Get Service Configuration
• User Configuration Objects
• FAIs
• Unified Messaging
(exposed through the EWS endpoint)
• SOAP-based AutoDiscover
• Message tracking
• Windows Live ID integration
• Contact and Calendar folder sharing
• Enhanced Time Zone support
• Room resource availability information
• Indexed Search
• Dumpster Access
EWS Functionality Enhancements
Exposing the full power of Exchange through the APIs
NEW
Exchange Web Services Managed API 1.1
Exchange 2010 Exchange Web Services API
Exchange 2010 SP1
Exchange 2010
Exchange Server 2007 SP1
Exchange Server
• Delegate management
2007
• Full access to items,
folders and attachments:
• Create
• Get
• Update
• Delete
• Availability
• OOF settings
• Notifications
• Synchronization
• Name Resolution
• Distribution Lists Expansion
• Search
•
•
•
•
Folder permissions
Public folders
Post items
ID conversion
•
•
•
•
•
•
•
•
•
•
•
•
•
•
NEW
MailTips information
Full Private Distribution List support
Get Service Configuration
User Configuration Objects
FAIs
Unified Messaging
(exposed through the EWS endpoint)
SOAP-based AutoDiscover
Message tracking
Windows Live ID integration
Contact and Calendar Folder sharing
Enhanced Time Zone support
Room resource Availability information
Indexed Search
Programmatic access to Dumpster
•
•
•
•
•
•
•
•
Create, retrieve, and modify Inbox Rules
Programmatic access to Archive Mailbox
Firewall traversing Notifications
Improved Administration features
Improved Mixed Version support
Throttling Protection Support
Control Application access to EWS
Client Certificate Authentication support
EWS 2010 Application Functionality
Calendar
• Create/Modify/Retrieve Appointments
• Retrieve Availability Information
• Suggest Best Appointment Time
• Time Zone Service
• Retrieve Available Rooms
E-mail
• Send/Retrieve/Forward/Reply Mail
• Retrieve MIME Content
• Search/Delete/Move/Copy Mail
• Folder Move/Copy/Create/Permissions
• Setting Auto-Response Message
Tasks
• Create/Delete/Update Tasks
• Search for Tasks
Contacts
• Create/Update/Delete Contacts
• Set picture
• Set all properties like e-mail addresses, phone numbers, location
• Create Contact Groups
Sample Application Models Using EWS
Client Applications
Portal Applications
Service Applications
Like:
• Email Clients
• Outlook
• Entourage
• Free/Busy
• Microsoft Office
Communicator
Like:
• Web Parts
• Shared Calendar Views
• 5 Most Recent E-mails
• PIM Systems
• Course Management
• Room Availability
Like:
• Synchronization
• CRM Contact
Synchronization
• Notifications
• Auto-Scheduler
Applications
• Mailer Applications
Client Applications
Entourage 2008
www.microsoft.com/mac/products/entourage2008/
Portal Applications
Conference Room Booking Application
Service Applications
Conference Room Appointment Display
Easy: EWS Managed API Simplifies Coding
Coding in the various EWS APIs paradigms available
GetFolderType request = new GetFolderType();
<soap:Envelope>
<s:Envelope>
request.FolderShape = new FolderResponseShapeType();
<soap:Body>
<s:Body>
request.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties;
<m:GetFolder>
<m:GetFolderResponse>
<m:FolderShape>
<m:ResponseMessages>
DistinguishedFolderIdType
inboxId = new DistinguishedFolderIdType();
<t:BaseShape>AllProperties</t:BaseShape>
<m:GetFolderResponseMessage
inboxId.Id = DistinguishedFolderIdNameType.inbox; ResponseClass="Success">
</m:FolderShape>
<m:FolderIds>
<m:ResponseCode>NoError</m:ResponseCode>
request.FolderIds = new BaseFolderIdType[] { inboxId
};
<t:DistinguishedFolderId Id="inbox" />
<m:Folders>
Folder inbox = Folder.Bind(service, WellKnownFolderName.Inbox);
</m:FolderIds>
<t:Folder>
GetFolderResponseType
response = serviceBinding.GetFolder(request);
</m:GetFolder>
<t:FolderId Id="..." ChangeKey="..." />
FolderInfoResponseMessageType responseMessage =
</soap:Body>
<t:FolderClass>IPF.Note</t:FolderClass>
response.ResponseMessages.Items[0] as FolderInfoResponseMessageType;
</soap:Envelope>
<t:DisplayName>Inbox</t:DisplayName>
...
</t:Folder>
if (responseMessage.ResponseClass == ResponseClassType.Success)
</m:Folders>
{
</m:GetFolderResponseMessage>
FolderType inbox = responseMessage.Folders[0]
as FolderType;
</m:ResponseMessages>
}
</m:GetFolderResponse>
</s:Body>
</s:Envelope>
Increased Productivity
Raw XML
Auto-generated proxies
EWS Managed API
“After working with Exchange for about 10 years I can say that this is
•by
Cross-platform
Multiple
platforms
• Windows
only (.NETwho
3.5)
far the most intuitive• and
easy
to use API ever and
developers
• No client-side logic
• Class-based access
• Fully Object Oriented
never
worked
with
Exchange
before
have
little
trouble
using it. “
• Manual plumbing
• No client-side logic
• Smart client-side logic
– Denis Khodak - Morgan Stanley
Sending An Email
Code sample with the Exchange Web Services Managed API 1.0
ExchangeService service = new ExchangeService();
service.AutodiscoverUrl(“bobk@contoso.com");
EmailMessage message = new EmailMessage(service);
message.Subject = "Email Subject";
message.Body = "The is the email body";
message.ToRecipients.Add("user1@litwareinc.com");
message.ToRecipients.Add("user2@litwareinc.com");
message.SendAndSaveCopy(WellKnownFolderName.SentItems);
Moving Exchange into the Cloud
Roadmap for Exchange Cloud Development
Traditional Development
• Exchange on Premise
• Applications on Premise
Hybrid S+S Software
• Exchange in the cloud (Exchange Online)
• Applications on Premise
Exchange
2007 SP1
Exchange
2010
Pure Cloud Development
• Exchange in the Cloud (Exchange Online)
• Applications in the Cloud (Azure)
Exchange
2010+
PowerShell in Exchange
For Exchange administrative tasks
•
•
Exchange server configuration
User administration
− User/resource management
− Mailbox creation/modification
•
•
Distribution list creation/modification
Public folder creation/modification
NEW
PowerShell with .NET
•
•
Improved Runspace APIs
− New PowerShell class simplifies invocation of
cmdlets
Unleashes Exchange management
from within compiled code
− PowerShell.Create(“get-process”).Invoke();
Invoking Exchange cmdlets from C#
Code Sample
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
•
SCredential credential = new PSCredential(username, password);
// Set the connection Info
WSManConnectionInfo connectionInfo = new WSManConnectionInfo(
new Uri(liveIdconnectionUri), http://schemas.microsoft.com/powershell/Microsoft.Exchange, credential);
connectionInfo.AuthenticationMechanism = AuthenticationMechanism.Basic;
// create a runspace on a remote path; the returned instance must be of type RemoteRunspace
Runspace runspace = System.Management.Automation.Runspaces.RunspaceFactory.CreateRunspace(connectionInfo);
// open the runspace
runspace.Open();
// Set the runspace as a local variable on the runspace
PowerShell powershell = PowerShell.Create();
// create the command
command = new PSCommand();
command.AddCommand("Get-Mailbox");
command.AddParameter("Identity", mailboxname);
powershell.Command = command;
try
{
// open the remote runspace
runspace.Open();
// associate the runspace with powershell
powershell.Runspace = runspace;
// invoke the powershell to obtain the results
return powershell.Invoke();
}
finally
{
// dispose the runspace and enable garbage collection
runspace.Dispose();
runspace = null;
// finally dispose the powershell and set all variables to null to free up any resources.
powershell.Dispose();
powershell = null;
}
PowerShell Remoting
•
•
•
•
NEW
Allows cmdlets to be run from remote
machines
without Exchange administration tools
installed
− Only requires PowerShell v2 installed locally
Access to Exchange administration from the
internet when published though the firewall
Solves cross-forest management issues
Utilizes RBAC model
What are Transport Agents and APIs?
•
•
•
Allow access to e-mail messages and their
contents while the messages transverse the
transport servers
− Change message properties and content during
transport
Transport agents are installed on Edge and
Hub transport server roles
Agents handle transport events and extend
behavior
Transport API Events
•
Manipulate messages at many different levels of
transport
−
−
−
−
SmtpReceiveAgent
RoutingAgent
DeliveryAgent
StoreDriverAgent
NEW
NEW
•
Use transport agents to implement functionality
that is not covered/available with transport rules
•
Replacement for much of store event sink
functionality
Editing Email Subject
Code Sample with SmtpReceiveAgent
namespace MyAgents
{
public sealed class MyAgentFactory : SmtpReceiveAgentFactory
{
public override SmtpReceiveAgent CreateAgent(SmtpServer server)
{
return new MyAgent();
}
}
public class MyAgent : SmtpReceiveAgent
{
public MyAgent()
{
this.OnEndOfData += new EndOfDataEventHandler(MyEndOfDataHandler);
}
private void MyEndOfDataHandler(ReceiveMessageEventSource source, EndOfDataEventArgs e)
{
// The following line appends text to the subject of the message that caused the
event.
e.MailItem.Message.Subject += " - this text appended by MyAgent";
}
}
}
Exchange Server 2010 API Changes
API Deprecation Roadmap
Exchange Server 2007
Exchange 2010
Client
CDO 1.2.1
Exchange
MAPI Client
Outlook
Obj. Model
Client
Outlook
MAPI
NET.Mail
Exchange
Web Services
Agents
Client Access Server
MAPI
ExOLE
DB
CDO 1.2.1
Exchange
Web Services
Transport
APIs
MAPI
Outlook
Obj. Model
EWS
Managed API
Client Access Server
Transport Server
NET.Mail
Agents
Store
Events
Roadmap
Deemphasized
Virus
Scan API
Mailbox Server
VSS
Deprecated
Virus
Scan API
Mailbox Server
Outlook
MAPI
Transport
APIs
Transport Server
NonExchange
API
WebDav
CDOEx
(3.0)
Exchange
EWS
MAPI Client Managed API
VSS
Legacy API Overview
Fragmented experience
Local Access
Intranet
Access
Outlook User
Experience
CDO 3.0 for
Exchange
CDO 1.2.1
Build-your-own
User
Experience
ExOleDB
MAPI
Internet
Access
Exchange
WebDAV
EWS: Comparing against Legacy APIs
EWS is the one API to support all application models
ExOleDB
Supports User Experience
Consistent with Outlook
Supports to Build your own
Client User Experience
CDO 3.0 for
Exchange
CDO 1.2.1
√
√
√
Exchange
MAPI Client
√
Exchange
WebDAV
√
√
Supports Local Access
√
Supports Intranet Access
√
√
Supports Internet Access
Supports New Exchange Server
2007 and Exchange 2010
functionality
Mainstream Support Available
Works on Exchange Server
2003
√
√
√
√
√
Works on Exchange 2007 SP1
√
√
√
√
√
√
√
Works on Exchange 2010
Exchange
Web
Services
EWS
Managed
API 1.0
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
√
Exchange 2010 API Changes
Deprecated APIs and alternatives
API
Functionality
Replacement
CDOEX
Mailbox Access
EWS
Exchange WebDAV
Remote Mailbox Access
EWS
ExOleDB (ADO provider)
Mailbox Access
EWS
OWA URL Commands
Free/Busy and Name
Resolution
EWS
Store Events
Asynchronous and
Synchronous Events
Transport Delivery
Events/ EWS
•
Exchange Server 2003 client APIs are in to extended support
−
−
Collaboration Data Objects 1.2.1
Microsoft Exchange Server MAPI Client
Both can be replaced by Exchange Web Services
Extended Support Policy
Exchange MAPI Client and CDO 1.2.1 in Exchange 2010
Exchange MAPI client and CDO 1.2.1 are in Extended Support
• Exchange MAPI client+CDO remain available for download for Exchange 2010
• Using the Exchange MAPI Client and CDO package against Exchange 2010 is supported
• Download Center is updated to reflect end-of-life status
During the Extended Support phase for Exchange Server, Microsoft provides:
•
•
•
Paid support only
Non-security related hotfix support requires a separate Extended Hotfix Support
Agreement to be purchased (per-fix fees also apply)
−
A hotfix can not be redistributed
Critical and Important Security update support at no additional cost
Please note: Microsoft will not accept requests for warranty support,
DCRs, or new features during the Extended Support phase
−
This could include Daylight Saving Time updates
End of Exchange 2010 Developer
Platform Module
For More Information
•
•
•
•
Exchange Server Tech Center
http://technet.microsoft.com/en-us/exchange/default.aspx
Planning services
http://technet.microsoft.com/en-us/library/cc261834.aspx
Microsoft IT Showcase Webcasts
http://www.microsoft.com/howmicrosoftdoesitwebcasts
Microsoft TechNet
http://www.microsoft.com/technet/itshowcase
© 2008 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market
conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.