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.