Easy MAPI Changelog

[25-11-2023] - Version 8.2.3 Build 1
  • Added: Support for Delphi 12
[28-11-2022] - Version 8.2.2 Build 6
  • Solved: Fixed an issue where changes made by an end user in an email form were ignored when the message was submitted using the IRwMAPIMessage.ShowForm method.
[03-10-2021] - Version 8.2.1 Build 10
  • Added: Support for Delphi 11 Alexandria.
  • Improved: MAPI dll and MAPI bitness detection.
  • Improved: License and version check of COM Server for cross-bitness environments.
[04-02-2021] - Version 8.2.1 Build 2
  • Added: The IRwMAPIFolder.SearchMessage() can now be used to quickly search a message by it's PR_SEARCH_KEY value in a specific folder. A typical usage scenario is to search for a message in the SentItems folder after it has been submitted. The SendPlainTextMessage example application (in the Intermediate examples folder) demonstrates how this works.
  • Improved: The error handling of the COM server for Cross-Bitness environments has been improved.
  • Improved: Some minor improvements to the MAPI dll finding and loading.
[29-12-2020] - Version 8.1.1 Build 44
  • Solved: Searching for the mapi dll could take a long time.
[01-11-2020] - Version 8.1.1 Build 41
  • Added: Support for Delphi 10.4.1 Sydney.
  • Solved: In some cases it was not possible to open subfolders in the FolderDialog.
  • Solved: Easy MAPI will now try to load the MAPI dll of the system language (in case multiple MAPI dll's have been installed).
  • Impoved: Some minor improvements to the MAPI dll finding and loading.
[01-06-2020] - Version 8.1.1 Build 35
  • Added: Support for Delphi 10.4 Sydney
  • Solved: Saving embedded message attachments failed when the Outlook IConverterSesion could not be instantiated.
  • Solved: The default "Hotmail" client is now excluded as a MAPI compatible client.
  • Solved: Easy MAPI will now use the msmapi32.dll instead of the olmapi32.dll if both are found (which could cause several kinds of logon failures).
  • Added: The "IRwMAPIMessage.ImportFromMime" now has a "mioCCSF_SENT_READ" flag which can be used to preserve the send/read flag when importing the message.
  • Solved: In some cases using the AccountManager resulted in EOleExceptions.
  • Added: The IRwMAPIMailMessage.SecurityFlags property can now be used to send signed and/or encrypted messages. This does require S/MIME to be propertly configured in Outlook.
[01-12-2019] - Version 8.1.1 Build 24
  • Added: The Cross-Bitness COM servers can now also be used for Simple MAPI clients
  • Solved: Easy MAPI can now handle Simple MAPI clients which only support the MAPISendMail() API method (Thunderbird)
  • Solved: In some cases a 64 bit Simple MAPI client was classfied as 32 bit compatible which lead to the uRwMAPIUtils.RegisterCOMServer to fail.
[11-08-2019] - Version 8.1.1 Build 6
  • Added: The Delphi 10.3 libraries have been rebuild with Delphi 10.3.2 and the "Runtime Package Compatibility Patch"
  • Solved: In some cases an exception was raised when retrieving the Identity info of a session.
  • Solved: In some cases an exception was raised when sending meeting invitations.
  • Solved: In some cases an exception was raised when reading the EntryID of a folder.
  • Solved: The "Monthly Every X Months on Day Y" recurrency pattern was not created correctly.
[31-03-2019] - Version 8.1.0 Build 9
  • Solved: In some cases an exception was raised after submitting a message using a FormManager form.
  • Solved: In some cases an "Unexptected EOF" exception was raised when loading a previously saved recurrence.
  • Solved: Exceptions triggered within the several Easy MAPI event handlers were not always propagated to the application.
  • Added: Easy MAPI now detects if an Office 365 version without the Cached Exchange mode enabled is used and raises an appropriate exception if this leads to incompatibility issues.
  • Added: Easy MAPI now detects if a Windows Store variant of Outlook is used and notifies the user that this version of Outlook is not supported.
  • Added: Easy MAPI no longer solely relies on the registry to see if Simple MAPI is available.
  • Added: The IRwMAPIMessage.DecodeSMIME can now be used to decode signed and/or encrypted messages.
  • Solved: In some cases the draft of a submitted message was not deleted.

    IMPORTANT: Windows XP is no longer supported. Easy MAPI can no longer be used on systems running Windows XP.

[25-11-2018] - Version 8.0.1 Build 10
  • Added: Delphi 10.3 Rio support
  • Solved: The FormManager.Forward(), Reply() and ReplyAll() alwasys returned mrCancel when used with the vsModal flag (even when the message was submitted).
[10-09-2018] - Version 8.0.0 Build 16
  • Solved: Opening S/MIME messages with attachments did not work correctly.
[01-06-2018] - Version 8.0.0 Build 10
  • Improved: Some minor improvements to the MAPI FormManager.
[25-03-2018] - Version 7.3.0 Build 8
  • Improved: Some minor improvements to the MAPI FormManager to improve backwards compatibility and to improve the compatibility with non-Exchange based messagestores.
  • Solved: The "IRwMAPIFormManager. FindMessageSite()" did not work correctly.
  • Added: When opening a saved message using the "IRwMAPIMsgStore.OpenSavedMessage()" it's now possible to specify whether the message should be opened using MAPI or with Outlook COM.
  • Added: The "IRwMAPISession.CreateMessage()" and " TRwMAPISession.CreateMessage()" now has an extra parameter which can be used to force Easy MAPI to create the message in the offline store or online store. When omitted the message will be created in the online store (which was the default behavior).
  • Solved: In some cases sending a mail from a different account than the default account (=SendUsingAccount) did not work correctly.
[11-02-2018] - Version 7.3.0 Build 1
  • Improved: The IRwMAPIMessage.ShowForm is now fully compatible with the latest versions of Outlook 2013 and Outlook 2016.
  • Improved: The MAPI FormManager functionality has been refactored to improve compatibility with the latest versions of Outlook 2013 and Outlook 2016. All reported issues with the FormManager have now been resolved.

    IMPORTANT: The signature of the FormManager.FindMessageSite has changed! If you have used this method in your code this change will break your code. Instead of a message argument this method now needs either a EntryID or SearchKey value!

[21-12-2017] - Version 7.2.2 Build 28
  • Modified: The Delphi 10.2.2. libraries have been recompiled with Delphi 10.2.2. build 2004.
[16-12-2017] - Version 7.2.2 Build 24
  • Improved: Easy MAPI now detects if the Outlook Click-To-Run registry keys have been added to the registry and attempts to add them if this this not the case (in HKCU).
  • Solved: The IRwExchangeManageStore.GetMailBoxTable() did not work correctly when no servername was specified.
  • Solved: A MAPI_E_INTERFACE_NOT_SUPPORTED or MAPI_E_EXTENDED exception was raised when showing a Form Manager form (Outlook 2016 i.c.w. KB4011178).
[21-10-2017] - Version 7.2.2 Build 9
  • Solved: The COM Proxy was build with the wrong versionnumber.
  • Solved: An AV was raised when closing the application after a MIME conversion.
[27-09-2017] - Version 7.2.2 Build 7
  • Solved: Fixed an issue (MAPI_E_CORRUPT_DATA) when creating contacts, appointments and tasks using Office 365.
  • Improved: The messagestore dialog performance has improved.
[13-08-2017] - Version 7.2.2 Build 1
  • Added: Delphi 10.2 packages have been recompiled with Delphi 10.2.1.
  • Modified: The RwMAPIInitialize now by default assumes the CoInitialize has been executed.
  • Solved: Fixed an exception which was raised when an Outlook FormManager Form was shown when Outlook 2010 was used.
  • Solved: Some minor issues.
[07-05-2017] - Version 7.2.1 Build 11
  • Solved: In some cases attachments added to a message using a FormManager form were not saved and/or send correctly.
  • Solved: A bug in 32 bit Proxy server (used for cross-bitness environments) which prevented mails from being send.
  • Solved: An access violation was raised when trying to send a message without bodytext using Simple MAPI.
[29-03-2017] - Version 7.2.1 Build 0
  • Added: Delphi 10.2 Tokyo support
  • Added: The IRwMAPISession.OpenOtherUsersMsgStore() can now also be used when a MAPI_HTTP connection is used (eg. Exchange 2016).
[05-03-2017] - Version 7.2.0 Build 56
  • Solved: Easy MAPI tried to use Extended MAPI with the David Tobit and Lotus messaging clients.
  • Solved: Tasks requests could not be opened by the recipient.
  • Added: The COM server (only needed fro Cross-Bitness environments) will write the version to the registry (HKLM\Software\RAPWare\Easy MAPI) when it's registered. The registry item will be removed when the service is unregistered.
  • Added: The COM Server now also supports the "versioncheck" and "silent" flags.
    Eg.
    RwEasyMAPI64.exe /regserver --> this will register the server. If a newer version of the server has already been registered you will get a warning
    RwEasyMAPI64.exe /regserver /silent --> this will register the server. No warning will be displayed (=old behaviour)
    RwEasyMAPI64.exe /regserver /versioncheck --> If a newer version of the server has already been registered you will get an error. The server will not be registered.
    RwEasyMAPI64.exe /regserver /versioncheck /silent --> If a newer version of the server has already been registered the registration will fail. No errormessage will be displayed.
[05-02-2017] - Version 7.2.0 Build 50
  • Improved: Easy MAPI now uses an improved system of loading/initializing/uninitalizing and unloading the MAPI dll to prevent unnecessary loading/unloading of the DLL.
  • Solved: Restrictions using properties of type "SystemTime" now use a higher precision than the Delphi TDateTime.
  • New: IRwMAPIProperty.AsSystemTime and IRwMAPITableField.AsSystemTime. The AsSystemTime property has a higher precision than the regular AsDateTime() property.
  • Solved: Setting HTML messagetext wich contained non ASCII characters did not always work correctly. Easy MAPI now uses an improved algorithm to detect the encoding of the HTML data.
  • Solved: A few minor issues.
[01-01-2017] - Version 7.2.0 Build 37
  • Improved: Easy MAPI now uses a diffent way to find the MAPI dll when Outlook is used (to prevent the "The loaded MAPI library does not support MAPIInitialize" error).
  • Solved: A memoryleak when setting a plain text message value.
  • Solved: The IRwMAPITable.SeekRow() always started at the beginning of the table
  • Solved: A few minor issues.
[28-08-2016] - Version 7.1.5 Build 9
  • New: IRwMAPIMessage.ImportFromMime(). This method can be used to import the data from e MIME message into a MAPI message.
  • New: IRwMAPISession.CreateMsg(). This method can be used to create a .msg file which will not be stored inside a messagestore.
  • New: IRwMAPISession.OpenMsgFile(). This method can be used to open a saved .msg file without importing it into a messagestore.
  • Improved: The TRwMAPITableEvents now also has a "Folder" property.
  • Solved: A few minor issues.
[01-05-2016] - Version 7.1.5 Build 3
  • Added: Delphi 10.1 Berlin support.
  • Solved: Sending HTML messages with Simple MAPI did not work correctly.
  • Solved: In some cases a submitted message stayed in the drafts folder.
  • Solved: A few minor issues.
[09-04-2016] - Version 7.1.5 Build 1
  • Improved: Creating an Exchange profile via Autodiscover did not work correctly when self signed certificates were used.
  • Improved: The IRwMAPIMessage.ExportToMime() no longer causes the message to change.
  • Improved: The IRwMAPIRecipientTableOpenRecipient() can now also open unresolved recipients.
  • Improved: Exporting multiple messages to MIME is now significantly faster.
  • Solved: The IRwMAPIRecipientTable.RecordResolved property returned true when the table did not contain a PR_ENTRYID field .
  • Solved: A memoryleak when the IRwMAPIRestrictionNot was used.
  • Solved: An issue which prevented the successfull creation of a (runtime created) profile when Outlook 2016 was installed.
  • Solved: In some cases a new mail message was not deleted from the drafts folder after submitting it.
  • Solved: The IRwMapiMessage.AddHtmlImageFromStream() did not add the image correctly.
  • Added: IRwMapiMessage.GetBody(). This method can be used to get the content of a specific body property (eg PR_BODY_HTML_B).
  • Improved: Outlook 2016 compatibility.
  • Solved: A few minor issues.
[02-12-2015] - Version 7.1.4 Build 12
  • Added: The ExportToMime now uses the Addressbook for Name Resolution.
  • Improved: Support for Outlook 2016 Click-To-Run.
  • Improved: Single Byte, Dual Byte and Multi Byte codepages are now all handled correctly.
  • Solved: The 32 bit COM Server (for cross-bitness support) did not work correctly.
  • Solved: A few minor issues.
[14-09-2015] - Version 7.1.4 Build 1
  • Added: Support for Delphi 10 Seattle.
  • Added: Support for Outlook 2016.
  • Solved: It was not possible to set a plaintext appointment body when connected to Exchange 2010.
  • Added: You can now use Easy MAPI to create profiles (in runtime) to connect to Exchange 2013 and/or Office 365 servers for both the Outlook and free Exchange MAPI/CDO client. The DynamicProfile example application demonstrates how this works. This feature is only supported by Easy MAPI Enterprise and does require both Easy XML and Easy Crypt as it needs to parse the Autodiscover XML data and to save encrypted passwords (for Office 365).
  • Solved: A few minor issues.
[15-06-2015] - Version 7.1.3 Build 4
  • Solved: When RTF encoded HTML was used "\" characters were not processed correctly.
  • Solved: A few minor issues.
[15-06-2015] - Version 7.1.3 Build 4
  • Improved: The IRwMAPITable now retrieves it's data in batches of 20 records (instead of a single call for each "Next"). This has a major effect on read performance on systems with a poor network connection.
  • Removed: The "tbkCurrentAbsolute" TRwMapiTableBookmark type.
  • Solved: The GAL could not always be read successfully for Exchange 2013 based connections.
  • Solved: Reading/Writing MAPI streams did not work correctly in cross bitness environments.
  • Solved: A few minor issues.
[21-04-2015] - Version 7.1.3 Build 1
  • Added: Delphi XE8 support.
  • Added: It's now possible to create a profile in runtime for Outlook 2013.
  • Added: It's now possible to delete recurrency exceptions.
  • Solved: A few minor issues.
[11-02-2015] - Version 7.1.2 Build 5
  • Solved: An "Invalid data type for �frame�" exception was raised when trying to show a FormManager form using a fully patched Outlook 2013 (after feb 10, 2015).
  • Solved: The RwGetOutlookInfo and Easy MAPI Logon procedures are now thread safe.
  • Solved: Setting a Plain Text value as body for an appointment did not work.
[19-01-2015] - Version 7.1.2 Build 3
  • Added: The possibility to send signed email messages. This functionality does require Easy Crypt to be installed.
  • Solved: A few minor issues.
[08-09-2014] - Version 7.1.1 Build 17
  • Added: Delphi XE7 support
  • Solved: Various minor issues.
[05-07-2014] - Version 7.1.1 Build 15
  • Solved: The ConvertRTFToPlainText() and ConvertPlainTextToRTF() always returned an empty string. In some cases this could have resulted in an empty body text (when a body text was requested).
  • Solved: Outlook Express could freeze when the ShowForm whas used (on Windows XP) .
  • Solved: On some systems it was not possible to add "Outlook Elements" (messages/tasks/etc) as attachment when using the default MAPI form.
  • Solved: It was not possible to create a weekly recurring appointment without an enddate using Outlook 2013.
  • Solved: On some systems it was not possible to send email using FormManager forms using Outlook 2013.
  • Solved: On some systems starting the TableEvents raised an exception.
[01-06-2014] - Version 7.1.1 Build 6
  • Solved: In some cases the MAPISession.Logoff would freeze the application when Outlook forms were used to display messages.
  • Solved: Removed some debug code that could cause problems when compiling application with the DEBUG conditional define enabled.
  • Added: It's now possible to force Easy MAPI to use the Outlook COM object to send messages via the IRwMapiMailMessage.SendUsingOutlook property.
  • Solved: In some cases the IRwMapiMailMessage.SendUsingAccount would not send the message from the specified account.
  • Solved: Some minor issues.
[01-04-2014] - Version 7.1.1 Build 0
  • Added: Delphi XE6 support
  • Added: It is now possible to save the RTF body directly to a stream using the "IRwMAPIMsg.SaveRTFBodyToStream" method. This method can be used to extract RTF text which contains binary data.
  • Solved: In some cases the ConvertHTMLToPlainText() also returned commented style information.
  • Solved: When using a FormManager form a message was always sent from the default account, even when choosing a different account to send the message from.
  • Solved: In same cases a MAPI_E_CORRUPT_DATA was raised when retrieving recipients from the Global Addresslist.
[03-02-2014] - Version 7.1.0 Build 15
  • Solved: When using Office 365, submitted messages would stay in the Outbox when Outlook was not running.
  • Added: The IRwMAPIMessage.SubmitMessage now contains an option "ForceOnline" flag (default = true). By setting this flag to False a message will be submitted in the locally cached folder (when Cached Exchange mode is enabled).
  • Solved: In some cases the "MAPISession.SessionInfo.ServerName" returned an empty string.
  • Solved: The IRwMAPITask.StartDate and IRwMAPITask.DueDate were handled as a localized datetime value instead of a date value.
  • Solved: Some minor issues.
[14-01-2014] - Version 7.1.0 Build 12
  • Modified: The TRwMAPISession.MAPIClient is no longer a published property!
  • Solved: Setting the IRwMapiMessage.RecipTo, IRwMapiMessage.RecipCC or IRwMapiMessage.RecipBCC caused the other recipients to be cleared (see https://www.rapware.nl/forum/index.php?topic=2768.0) for more info.
  • Solved: Various minor issues.
[16-11-2013] - Version 7.1.0 Build 5
  • Solved: Converting RTF to PlainText and vice versa did not work correctly in 64 bit applications (or when the 64 bit Proxy Server was used).
  • Solved: After calling the IRwMAPIRecipientTable.ResolveRecord() method, the table was moved to the first record.
  • Solved: The 64-bit proxy server was used for (32 bit) Simple MAPI connections on 64 bit machines.
[01-11-2013] - Version 7.1.0 Build 1
  • Added: Delphi XE5 support.
  • Added: FormManager support for Click-To-Run versions of Outlook 2013.
  • Added: Save to "eml" support for Click-To-Run versions of Outlook 2013.
  • Solved: A "Class not registered" exception was raised when trying to use the Account Manager when Outlook 2013 Click-To-Run was installed.
  • Solved: In some cases a "MAPI_E_NOT_ENOUGH_MEMORY" exception was raised when reading/writing text based properties which contained large amounts of data.
  • Solved: A "requested interface .. is not supported.." exception was raised when creating/showing a non email message using a FormManager form.
  • Solved: Some minor issues.
[15-07-2013] - Version 7.0.0 Build 34
  • Solved: The Delphi XE4 packages (dpk) were missing from the setup.
  • Solved: In some cases MAPI error messages were not formatted correctly.
[29-06-2013] - Version 7.0.0 Build 32
  • Solved: An "EMAPI_NOT_ENOUGH_RESOURCES" exception was raised in the IRwMAPISession.OpenMsgStore() when the "Outlook Hotmail Connector" was installed and when Hotmail was the only configured messagestore.
  • Solved: The hierarchietable of the IPM Root folder returned jibberish when the iCloud messagestore was used.
[05-06-2013] - Version 7.0.0 Build 29
  • Solved: In some cases HTML messages were not composed correctly when using Outlook 2013.
  • Solved: It was not possible to make multiple modifications to a recipienttable by using multiple calls to ModifyRecipients().
[03-06-2013] - Version 7.0.0 Build 27
  • Added: Delphi XE4 support.
  • Solved: In some cases the binary data of an attachment was not copied to a "reply" or "forward" when the IRwMAPIMailMessage.CreateReply() or IRwMAPIMailMessage.CreateForward() was used.
  • Solved: In some cases the body content was not copied to a "reply" or "forward".
  • Added: It is now possible to change properties in a recipientlist using the IRMAPIMessage.ModifyRecipients() method.

Code example:


procedure TFrmAppointment.ToolButton1Click(Sender: TObject);
var
  AB: IRwMAPIAddressBook;
  Recips: IRwMAPIRecipientTable;
begin
  inherited;
  // Create a new Empty recipientable
  AB := Session.OpenAddressBook(True);
  Recips := AB.CreateRecipientTable;

  // Select the first recipient
  FAppointment.Recipients.First;

  // Copy the required properties of the first recipient to the recipienttable
  Recips.Insert;
  Recips.FieldByName(PR_ROWID).AsInteger      :=  FAppointment.Recipients.FieldByName(PR_ROWID).AsInteger;
  Recips.FieldByName(PR_ADDRTYPE).Value       :=  FAppointment.Recipients.FieldByName(PR_ADDRTYPE).Value;
  Recips.FieldByName(PR_ENTRYID).Value        :=  FAppointment.Recipients.FieldByName(PR_ENTRYID).Value;
  Recips.FieldByName(PR_DISPLAY_NAME).Value   :=  FAppointment.Recipients.FieldByName(PR_DISPLAY_NAME).Value;
  Recips.FieldByName(PR_RECIPIENT_TYPE).Value :=  rtTo;

  // Update the response status --> set it to declined
  Recips.FieldByName(PR_RECIPIENT_TRACKSTATUS).AsInteger := 4; // declined

  // Update the table
  FAppointment.ModifyRecipients(moModify, Recips);

  // Save the changes
  FAppointment.SaveChanges(smKeepOpenReadWrite);
end;
  • Solved: A performance issue when sending bulk HTML based email.
  • Solved: In some cases the wrong codepage was used when sending HTML messages.
  • Solved: Some minor issues.
[24-04-2013] - Version 7.0.0 Build 21
  • Improved: Easy MAPI now checks the bitness of the RwEasyMAPI proxy before using it (in Cross-Bitness environments)
  • Solved: A MAPI_E_CORRUPT_DATA exception was raised after saving a newly created recurrency pattern on an Exchange Server using the MAPI/CDO package.
  • Solved: It was not possible to create/compose a message while Outlook was in Offline mode as Easy MAPI tried to open the messagestore, in which the message was created, with the ForceOnline flag set to true.
  • Solved: In some situations meeting updates and/or appointment cancellations were not delivered correctly to the specified recipients as they were flagged as "DUPLICATEDELIVER" by Exchange.
  • Solved: Some issues with the setup.
[25-03-2013] - Version 7.0.0 Build 18
  • Solved: In some cases HTML messages were converted to Plain Text when the message was sent using Outlook 2013.
  • Solved: In some cases an "invalid class string" exception was raised when trying to show a message using either the FormManager or default MAPI form.
  • Solved: No meeting cancellations were send after calling the IRwMAPIAppointment.Send() method when only the recipientlist was cleared.
  • Modified: RwGetOutlookVersionEx() has been replaced by RwGetOutlookInfo(). This new method also returns the bitness of the installed Outlook version and also wether or not the ClickToRun version is installed.
  • Solved: When a message, loaded from a saved .msg file, was shown in a FormManager form, the application would raise an AV when closed.
  • Solved: Easy MAPI would either raise an exception, or return no profiles, when Outlook 2013 Click-To-Run was used (part of Office 365).
  • Added: Support for 2013 "Click-To-Run" (Office 365).
  • Solved: A memory leak in the RecipientList when compiled as 64 bit application.
  • Solved: Some issues with regards to sending meeting invitations, updates and cancellations.
  • Solved: Some minor issues.
[06-03-2013] - Version 7.0.0 Build 12
  • Solved: A "Table is EOF" exception was raised after closing a message, of which attachments were read, using Simple MAPI.
  • Solved: An Access Violation was raised when trying to send meeting updates.
[03-03-2013] - Version 7.0.0 Build 11
  • Added: Full support for Firemonkey V2.
  • Renamed: The following units have been renamed to VCL. and FMX. to support Firemonkey: uRwBoxes, uRwGraphics, uRwLogViewer, fRwWaitDlg, uRwDescriptionImageList, uRwTrayIcon, fRwMAPIFields, fRwMAPIFolderDialog, fRwMAPIProperties, uRwMAPIFolderDialog, uRwMAPIOutlook, uRwMAPISession, uRwWebBrowser
  • Renamed: The EasyMAPI.net folder has been renamed to EasyMAPI
  • Solved: The IRwMAPIMessage.HTMLBody returned an empty string for HTML messages created with Outlook 2003.
  • Solved: When HTML messages were saved to .eml files, the HTML content was replaced by plain text and the HTML content was attached as an attachment.
  • Solved: FormManager forms would not display HTML content of new messages when Outlook 2013 was used.
  • Solved: In some cases opening a message from a drag/drop operation raised an exception.
  • Added: IRwMapiMsgStore.SaveDroppedMessage(); This method can be used to save a message retrieved in a drag/drop operation.
  • Solved: Some minor issues with regards to exception handling and recurrency patterns.
  • Added: function RwTimeZoneToLocal() (in uRwMAPIUtils.pas). This function can be used to convert the Start- and Enddate of recurring appointments to local datetime values in case TimezoneInformation is specified.
  • Solved: Some minor issues.
[01-10-2012] - Version 6.2.1 Build 4
  • Added: Delphi XE3 support.
  • Added: Outlook 2013 support.
  • Added: Support for Exchange 2010 Retention Policies. The MsgStoreCheckInbox example application demonstrates how to programmatically set a retention policy.
  • Solved: Some minor issues.
[23-07-2012] - Version 6.1.1 Build 28
  • Modified: The SendHtmlMessage example application now also demonstrates how to use background images in HTML messages (in combination with Outlook 2007 and newer).
  • Solved: The IRwMapiMessage.CreateForward did not add the attachments of the source message to the created forward.
  • Solved: A minor bug in the Appointment Recurrency encoding/decoding
  • Added: The TRwMapiSession.SessionInfo.ServerName property. This property returns the name of the Exchange Server (Easy MAPI Enterprise only).
  • Added: TRwMapiSession.OpenOtherUsersMsgStore (Easy MAPI Enterprise only). This method can be used to open the messagestore of another user in an Exchange environment.
  • Added: OpenOtherUsersMailbox example application. This example application demonstrates how to open a messagestore from another user (Easy MAPI Enterprise only). It is located in the "Advanced" examples folder.
  • Added: An Appointments DB-Sync (2-way) demo application. This demo application is located in the "Advanced" examples folder.
  • Solved: Various minor issues.
[19-06-2012] - Version 6.1.1 Build 25
  • Solved: A "MAPI has not been initialized on this thread yet!" exception was raised when trying to logon to a 32 bit MAPI client, on a system with Outlook 2010 X64 installed.
  • Solved: Outlook 2000 and 2002 Recurrency Patterns were not decoded properly.
[04-06-2012] - Version 6.1.1 Build 20
  • Solved: A "Failed to locate the MAPI dll for the client !" exception was raised when the DllPathEx/DllPath registry key contained Environment strings (ie: %ProgramFiles%\Outlook Express\msoe.dll).
  • Improved: The IRwMapiMessage.GetMessagePlainText() now tries to force Outlook to create the PR_BODY if it doesn't exist.
  • Modified: Easy MAPI will automatically unload the MAPI dll after logging off when a 32 bit MAPI client is used. Easy MAPI will not automatically unload the MAPI dll after logging off when a 64 bit MAPI client is used. This will solve "MAPI logon failed: RwLoadMAPI failed! Check if system resources are exhausted." exceptions in applications which logon/logoff multiple times.
  • Added: The IRwMapiMessage interface now contains a "PlainTextBody" property. This property returns the content of the PR_BODY property.
[14-05-2012] - Version 6.1.1 Build 15
  • Modified: Easy MAPI will now only use the "SendAccount" feature when an account is explicitly set using the "IRwMapiMailMessage.SendUsingAccount" property.
  • Solved: The IRwMapiMessageSite.RefreshForm() did not refresh the form when Word was set as E-Mail Editor on Outlook 2003 systems.
  • Solved: An Exception (Assertion) was raised when using the FormManager.ShutDownForms() when Word was set as E-Mail Editor on Outlook 2003 systems.
  • Solved: The AddRecipients did not add recipients to an existing set of recipients when used in combination with a FormManager form. It replaced any existing recipients instead.
  • Solved: ICS did not work correctly on systems where the "Cached Exchange Mode" was enabled.
  • Solved: The IRwMapiMailMessage.AddHTMLImageFromStream() raised an exception when used.
  • Solved: Many minor issues.
[26-03-2012] - Version 6.1.1 Build 10
  • Solved: The Addressbook dialog did not display any unresolved recipients provided in a prefilled recipienttable.
  • Modified: Easy MAPI no longer automatically unloads the MAPI dll after a logoff to improve compatibility with Outlook 2010 X64. The MAPI dll is now unloaded when the application is closed. It is still possible to explicitly unload the MAPI dll using the RwUnloadMapiDLL().
  • Modified: The various MessageStore Out-of-Office (OOF) functions are moved to the IRwMapiOOF interface. The example application demonstrates how you can use this new IRwMapiOOF interface.
  • Solved: Re-initializing MAPI, without unloading the MAPI dll, raised an AV (only 64 bit applications, in combination with Outlook 2010 X64)
  • Solved: After logging on to a Simple MAPI session for the second time a "There�s no MAPI client library installed ... " exception was raised.
  • Solved: Initializing the MAPI subsystem using the RwInitializeMapi() before creating a TRwMapiSession could lead to an AV when trying to logon.
  • Solved: The ConvertRTFStreamToHTMLStream() raised a RangeCheck exception when the appplication was compiled with "Range Checking" enabled.
  • Solved: In some cases a MAPI_E_NOT_INITIALISED exception was raised when trying to logon for a second time.
[27-02-2012] - Version 6.1.1 Build 6
  • Solved: On some systems a A "Failed to locate the MAPI dll for the client ""!." exception was raised when trying to logon to a MAPI session.
  • Solved: In some cases the IRwMapiMessage.GetMessagePlainText() and IRwMapiMessage.GetBody() returned the HTML message text.
  • Solved: The Delphi XE2 packages were missing from the setup.
  • Solved: The IRwMapiMailMessage.SaveToFile() raised an AV when called from within a 64 bit application.
[21-02-2012] - Version 6.1.1 Build 5
  • Solved: The "ContainerClass" was not set properly for newly created folders when using Delphi 2009 or newer.
  • Added: Support for "Out-of-Office" messages. The "IRwMapiMsgStore.CreateOOF(const MsgText: TRwMapiString): IRwMapiMessage;" function can be used to create an Out-Of-Office message and the "IRwMapiMsgStore.OOFState" property can be used to enable/disable the Out-Of-Office feature.
  • Solved: It was not possible to clear the recipientlist of a saved message (draft).
  • Improved: Various recurrency patterns could not be decoded by Easy MAPI.
  • Improved: Various recurrency patterns were not encoded correctly by Easy MAPI.
  • Solved: In same cases writing occurence exceptions (for recurring appointments) would cause a corrupt recurrency pattern.
  • Solved: It was not possible to send meeting requests, updates and deletes using the IRwMapiAppointment.Send() method.
  • Added: The MsgStoreAppointments example application now demonstrates how to use the IRwMapiAppointment.Send() method to send meeting requests.
  • Added: The various Synchronizer components now contain a "OnConfigError" event. In case of a corrupt StateStream an EMAPI_CORRUPT_DATA exception was raised when configuring a synchronizer. This exception caused the synchronizer to fail. Using the OnConfigError it is now possible to ignore this error by setting the "Stop" argument to false. When the "Stop" argument is set to False, Easy MAPI will clear the StateStream and will retry to configure the Synchronizer.
  • Improved: The "MAPIClient" property can now be used for both 32 and 64 bit clients.
  • Improved: Easy MAPI now checks both the "DllPathEx" and "DllPath" registry entries to determine which MAPI dll should be loaded.
  • Modified: It is now possible to clear the value for the TRwMapiSession.MAPIClient property. When "" is set as value Easy MAPI will revert to the default behavior.
  • Added: It is now possible to specify a "SendAccount" for outgoing e-mail messages. This "Accounts" functionality is demonstrated in the AccountManager.dpr and the SendPlainTextMessage.dpr example applications (both in the Intermediate examples directory).
  • Solved: A "There is no field 'fieldname'" exception was raised when a non-type-specific string field was requested from a table that only contains ansistring fields and when the application was compiled with the UNICODE directive.
  • Solved: Many minor issues.
[26-10-2011] - Version 6.1.0 Build 7
  • Solved: The MAPI FormManager did not fire the "OnShutdown" event when Outlook 2003 was used and Word was set as the default message editor.
  • Solved: The IRwMapiMessage.CreateReply() used the address of the recipient instead of the address of the sender(s).
  • Solved: The new RwMsgBox() implementation caused problems on Windows 2000 systems.
  • Solved: Both the IRwMapiAddressbookContainer.CreateRecipient() and IRwMapiAddressbookContainer.CreateDistList() didn't work well on Outlook 2010.
  • Added: A "Version" property has been added to the TRwMapiSession component. This property returns the version of Easy MAPI.
  • Improved: Easy MAPI now checks the version of the RwEasyMAPI proxy before using it.
  • Improved: The RwEasyMAPIXX COM Servers now use a different/better mechanism to terminate when the host application terminates in an improper way.
  • Added: A "MAPIClient" property has been added to the TRwMapiSession component. By setting this property you can force Easy MAPI to use a particular client (instead of the default MAPI client). ie:
    
    MapiSession.MAPIClient := 'Windows Live Mail';
    MapiSession.LogonInfo.UseExtendedMAPI := False;
  • or - MapiSession.MAPIClient := 'Microsoft Outlook'; MapiSession.LogonInfo.UseExtendedMAPI := True;
    
    There are some limitations (which will be solved in a later build):
    1) You must set the MAPIClient before doing any MAPI operations (like reading profiles etc).
    2) It will only work in 32 bit applications in combination with 32 bit MAPI.
[01-10-2011] - Version 6.1.0 Build 3
  • Added: Delphi XE2 support.
  • Added: Easy MAPI can now be used in both 64 bit and 32 bit applications. When used in a 32 bit application, Easy MAPI will use the RwEasyMAPI64.exe COM Server when Outlook 2010 X64 is installed When used in a 64 bit application, Easy MAPI will use the RwEasyMAPI32.exe COM server when a 32 bit version of Outlook is installed. Pleae note that either version of the COM Server needs to be registered with the /regserver argument (i.e. RwEasyMAPI64.exe /regserver) after deployment AND!! after each update.
  • Improved: The COM Server now closes itself when the host application is terminated improperly (like Ctrl-Alt-Del, End-Process).
  • Solved: It was not possible to use restrictions in combination with MultiValued fields (like NPR_CATEGORIES).
  • Added: It is now possible to clear the contact picture by specifying NIL as argument for the IRwMapiContact.LoadContactPicture() method.
  • Added: IRwMapiAddressbook.OpenEntry(AEntryID: TRwMapiEntryID; out ObjectType: TRwMapiObjectType; AAccessLevel: TRwMapiAccessLevel = alBestAccess): IRwMapiProp; With this method it is possible to open either Distributionlists, Containers or Recipients. Depending on the object (returned in ObjectType) a IRwMapiDistributionList, IRwMapiContainer or IRwMapiRecipient will be returned.
  • Added: IRwMapiAttachmentTable.FindAttachment(). This method can be used to locate an attachment (by it's number) in an attachment table. After successfully locating the attachment you can use the OpenAttachment() or DeleteAttachment() to open, or delete it.
  • Solved: The AttachmentTable returns one less item when walked through it for a second time. eg:
    
    Table.First;
    Table.DisplayFields; // shows 3 records
    Table.First;
    Table.DisplayFields; // shows 2 records
    
  • Solved: The FormManager.ShowMessage(); always showed the first created message (in case of multiple calls to ShowMessage() with different messages as argument).
  • Solved: Several problems with the setup
  • Solved: The NPR_CLIPSTART and NPR_CLIPEND (appointment) properties were not set correctly.
  • Solved: Some minor issues
[24-07-2011] - Version 6.0.0 Build 48
  • Solved: The FormManager did not work properly when used in combination with Outlook 2010 X64.
  • Solved: A bug in retrieving the task recurrency.
  • Added: Example application that demonstrates how to archive messages of multiple messagestores using the ExchangeManageStore functionality in combination with MultiThreading.
  • Solved: Table restrictions were ignored when the default table fieldset was used.
  • Solved: The "MapiSession.SessionInfo.ProfileName" always returned an empty string.
[17-07-2011] - Version 6.0.0 Build 47
  • Solved: It was not possible to send messages to recipients not listed in the addressbook, using Windows Live Mail 2011.
  • Solved: In some cases a "malformed address" exception was raised when trying to send a message.
  • Solved: The RwGetOutlookVersionEx() can cause an exception when used on a system where Office 2000 is installed, but not Outlook 2000.
  • Modified: The RwGetMapiInfo() now uses a slightly different (improved) way to determine the various MAPI properties.
  • Solved: Created ICS Synchronizers were not destroyed until the session was disconnected. Because of this memory use would increase after each call to the Synchronizer.Synchronize() method.
  • Solved: It was not possible to open and save attachments that contained embedded messages.
  • Solved: In some cases opening a mesasgestore would lead to a non-responsive/frozen application.
  • Solved: The "Name Prefix" and "Suffix" were missing from the calculated fullname of a contact.
[12-06-2011] - Version 6.0.0 Build 45
  • Added: The IRwMapiContainer.GetHierarchyTable now has a "AConvenientDepth" argument. When set to true the returned hierarchy table will be filled with containers from multiple levels. When set to false (=default) the returned hierarchy table only contains the container's immediate child containers. This is especially usefull when trying to retrieve all the addresslists of the root addressbook container (when using Exchange). The AddrBookViewer.dpr example application demonstrates how you can use this feature.
  • Solved: E-Mail addresses of newly created contacts did not appear in the addressbook until the contact was opened and saved in Outlook.
  • Solved: The fullname of new contacts was not set correctly.
  • Solved: Saving contactpictures (passportphotos) did not work.
  • Solved: The DLL example application would close Outlook (when running) after submitting a message.
  • Solved: A "The list is EOF!" exception was raised when sending messages with more than 1 attachment using Simple MAPI.
  • Modified: Easy MAPI now uses a slightly different way to determine which MAPI client is installed.
[16-05-2011] - Version 6.0.0 Build 44
  • Solved: On Windows XP with Outlook Express, the IRwMapiMailMessage.ShowForm hangs, only "To:" field is accessible, can't click anything else. Appears to be a hang, but [ESC] will cancel.
  • Solved: In some cases an AV was raised while reading the inbox from a Windows Live client on a Windows 7 system.
  • Solved: Setting the IRwMapiContact.FileUnder property did not work correctly in Outlook 2010. The specified value was ignored by Outlook.
  • Solved: A memory leak that occurred when sending messages with attachments using Simple MAPI.
  • Solved: A "There is no email program associated to perform ....." dialog is displayed when the MAPISession is deactivated on a Windows 7 system with Thunderbird 3.1 installed.
  • Solved: A small memoryleak that would occurr if no MAPI client was detected.
  • Solved: some minor issues
[26-04-2011] - Version 6.0.0 Build 42
  • Solved: It is now possible to use the ExchangeManageStore functionality on Windows 7 / Outlook 2010 / Exchange 2010 systems
  • Solved: A "not supported" exception was raised when using the IRwMapiTable.SetFields().
  • Solved: In some cases an exception was raised when trying to decode a recurrency pattern.
  • Solved: In some cases the destruction of a RecipientTable would cause an AV.
  • Solved: When using FormManager forms, changes made to the recipientlist (by the enduser) were not being persisted when the form was preloaded with a default set of recipients.
  • Solved: It was not possible to create recurrency patterns with Outlook 2010 X64 installed.
  • Solved: Decoding recurrency patterns created by Outlook for Birthdays could cause an Exception.
  • Solved: Multivalued string properties were not being stored correctly when delimited by carriage returns (only semicolon delimeted string were stored correctly).
[22-03-2011] - Version 6.0.0 Build 40
  • Solved: Int64 values were not always returned correctly.
  • Solved: Using the NPR_CATEGORIES property in a table caused an "invalid variant type cast" error.
  • Solved: It was not possible to use the ExchangeManageStore on a system with the Exchange MAPI/CDO client installed in combination with an Exchange 2007/2010 server without public folders.
  • Solved: A bug in the "weekly, every X weeks" recurrency schedule that could lead to a wrong startdate of the first appointment.
  • Solved: Accessing the IRwMapiMessage.BodyText in a thread could cause "strange" exceptions when the BodyText contained RTF encoded text.
  • Solved: Calling the Simple MAPI AddressBook dialog raised an exception on a Win XP / Outlook Express 6 system
  • Solved: The various example applications will now work well on systems with the Exchange MAPI/CDO client installed.
  • Solved: some minor issues
[07-02-2011] - Version 6.0.0 Build 35
  • Added: An example application that demonstrates how to get data from SMIME messages,.
  • Added: An example application that demonstrates how to use Easy MAPI in NT-Service applications.
  • Added: An example application that demonstrates some different ways to create unicode messages.
  • Added: The possibility to change the StartDateTime and EndDateTime of an occurrence of a recurring appointment
  • Solved: In some cases the HTML of HTML formatted messages was not retrieved correctly on OL2000 and OL2002 systems.
  • Solved: Some minor bugs in the example applications.
  • Solved: It was not possible to delete meeting requests using Easy MAPI Professional.
  • Solved: It was not possible to add exceptions to recurring appointments
  • Solved: Some minor issues
[22-01-2011] - Version 6.0.0 Build 34
  • Added: The "ProcessNewMessagesInThread" (advanced) example application. This application demonstrates:
    1. how to use MAPI in a thread
    2. how to use multithreaded events
    3. how you could use Easy MAPI to process messages in a certain folder
    4. how to use custom properties to flag messages so that they only get processed once.
  • Solved: In some cases HTML messages were not recognized as HTML messages by Easy MAPI
  • Solved: In some cases Outlook 2010 X64 was not detected by Easy MAPI
  • Solved: Some minor issues
[19-12-2010] - Version 6.0.0 Build 31
  • Solved: Freeing the TRwMapiSession before releasing all used interfaces could cause an Access Violation
  • Solved: A problem in the MsgStoreContacts example application that caused an AV when trying to update an existing contact.
  • Solved: When reading the NPR_CATEGORIES property the wrong value(s) were returned
  • Solved: Setting the IRwMapiMailMessage.ReplyTo property resulted in an EMAPI_INVALID_PARAMETER exception.
[12-12-2010] - Version 6.0.0 Build 29
  • Added: ExchangeManageStore Example application
  • Added: MAPI DLL Example Application
  • Solved: FileAttachments were not being sent when using Simple MAPI
  • Solved: A minor bug in the ExchangeICS.dpr example application
  • Solved: An EMAPI_CALL_FAILED exception was raised when trying to save an uncompressed RTF messagetext using Outlook 2010 X64
  • Solved: It was not possible to connect to an Exchange server using the Exchange MAPI/CDO client
  • Solved: Some minor issues
[22-11-2010] - Version 6.0.0 Build 25
  • Added: The WrapMapiMessage() has been added.
  • Solved: Setting a value in a "MultiValued" property caused an exception.
  • Solved: Some minor issues
[12-11-2010] - Version 6.0.0 Build 24
  • Added: The messagestore and addressbook parsers are now available in Easy MAPI V6
  • Solved: Added missing .dcr's and Delphi XE .dpk files to the setups
  • Solved: Two memory leaks
  • Solved: In some cases an AV could occurr when release Easy MAPI objects
  • Solved: Some minor issues
[01-11-2010] - Version 6.0.0 Build 15
  • Modified:

Everything! Easy MAPI V6 has been rewritten from the ground up as this was the only way to incorporate the many wishes we've received in the past couple of years.

Because of this it's not possible to list all the changes in this changelog. Instead only the most imported changes will be listed below:

1) Support for Outlook 2010 64 Bit

Yes. This is correct. Easy MAPI V6 can be used in combination with Outlook 2010 X64!

As it is not possible to load the 64 bit MAPI dll into a 32 bit Delphi application, Easy MAPI V6 comes with an Out-Of-Process 64 bit COM component (RwEasyMAPI64.exe) that acts as proxy component between your 32 bit Delphi application and the 64 bit MAPI dll.

This component is only used by Easy MAPI when Outlook 2010 X64 is detected!

Easy MAPI licensees may redistribute this COM Component free of charge. Please do note that you must register this COM server in your setup (RwEasyMAPI64.exe /regserver).

2) All properties are treated the same with Easy MAPI V6

Until now Easy MAPI has treated named properties differently from regular properties. This resulted in code like: Msg.NamedProp() Msg.PropByName() Store.NamedPropTag()

Table.SetFields(VarArrayOf[PR_ENTRYID, ANamedPropTag])); A downside of this approach was that it was hard to use Named Properties in Tables (as you would first have to get the tag of the named property before you could use it)

In Easy MAPI V6 there is only one way to handle properties, both the standard and the named properties. ie. Msg.PropByName() Table.FieldByName()

Easy MAPI will take care of the translation to the property tag under the hood. One of the consequences of this new approach that the following code no longer works:

Table.SetFields(VarArrayOf[PR_SUBJECT, PR_ENTRYID])); In EM V6 you will have to use Table.Fields.Add(PR_SUBJECT); Table.Fields.Add(PR_ENTRYID);

Adding named properties is now as simple as: Table.Fields.Add(NPR_COMMON_HIDEPAPERCLIP)

And if you want to use/create your own named properties you must now first register them using the RegisterProp method. ie: PropDef := MapiSession.RegisterProp('MyProp', 1, dtAnsiString, True, MyPropSet);

Also note that in EM V6 it is no longer possible to use MAPI property tags directly.

3) Performance improvements

Easy MAPI V6 uses a different approach to read/write properties from message objects. This new approach can drastically speed up your application when you need to create large amounts of messages. Easy MAPI V6 now also has methods to read/write properties in batches for even faster throughput.

4) Common MAPI properties added as standard Delphi properties

The most used properties are now available as regular Delphi properties. This means that you won't have to lookup the MAPI property definitions for the mostly used properties.

ie. Instead of NewMessage := MapiSession.CreateMessage; NewMessage.AddRecipients(EdtTo.Text, rtTo, True); NewMessage.PropByName(PR_SUBJECT).AsString := EdtSubject.Text; NewMessage.SetMessageText(MemoPlainText.Text, mtfPlainText); NewMessage.SubmitMessage(astMoveToSentItems);

You can now use: NewMessage := MapiSession.CreateMailMessage NewMessage.RecipTo := EdtTo.Text; NewMessage.Subject := EdtSubject.Text; NewMessage.Body := MemoPlainText.Text; NewMessage.SubmitMessage(astMoveToSentItems);

5) The MAPI Table is no longer a read-forward only table

In Easy MAPI V5 and earlies tables could only be read forward. In Easy MAPI V6 it is finally possible to move forwards and backwards (Next and Previous).

6) Recipienttables

In Easy MAPI V5 there was a difference between recipienttables of new messages and received messages. In Easy MAPI V6 this difference is gone. All recipienttables are now the same.

7) Improved "Life-Time Management"

Eays MAPI V6 no longer has problems when you logoff from a MAPI session while still having references to various Easy MAPI objects (like folders, messagestores etc).

8) Improved support for Multi-Threading

Using MAPI in a multi-threaded application is still not easy, however, Easy MAPI V6 will now help you with the initialization and finalization per thread.

9) Easy MAPI can now be used in .NET (C#)

The COM component that was developed to support Outlook 2010 X64 can also be used to add MAPI functionality to your C# (.NET) application. The 32 bit version of the COM component can be used to use MAPI X86.

The .NET version of Easy MAPI is currently in beta.

10) Delphi XE support

11) Improved Outlook and Exchange 2010 support

12) Many, many, many more minor changes and new features

[30-05-2010] - Version 5.0.0 Build 47
  • Solved: Some minor issues
[06-04-2010] - Version 5.0.0 Build 45
  • Solved: The AddressBook.GetGlobalAddressListID always returned null
  • Solved: The MapiSession.FlushQueus() always used Outlook to flush the Queus. When connected to Exchange, Easy MAPI will now use the IMAPISession.FlushQueus() to flush the queu.
  • Solved: The RwUnInitializeMapi() will no longer unitialize and/or unload MAPI when there are still mapi session instances
  • Added: A Logviewer component (TRwLogViewer) that can be used in combination with the Rapware logger
  • Solved: Some minor issues
[23-03-2010] - Version 5.0.0 Build 43
  • Solved: In some cases the returned value for IRwMapiMessage.GetMessageText() was encoded using the wrong codepage.
  • Added: The ICS Synchronizers now have an "OnSyncStart" and "OnSyncStop" event.
  • Improved: Message properties can now be read (and written) in less time (= a speed enhancement).
  • Solved: Some minor issues
[08-03-2010] - Version 5.0.0 Build 38
  • Added: The ICS Synchronizers now have an "OnError" event. When this event is implemented the synchronization will not stop when a MAPI_E_CORRUPT_DATA (a corrupt message) is processed.
  • Solved: Some minor issues
[07-02-2010] - Version 5.0.0 Build 34
  • Solved: When creating Recurrency exceptions the appointment got corrupted
  • Solved: The ConfigureMsgService will now correctly set the PR_ROH_PROXY_SERVER (if specified).
  • Solved: Some minor issues
[30-11-2009] - Version 5.0.0 Build 29
  • Solved: Windows Live Mail (Simple MAPI) support on Windows 7
  • Solved: Some minor issues
[21-09-2009] - Version 5.0.0 Build 27
  • Added: Delphi 2010 support
[22-06-2009] - Version 5.0.0 Build 23
  • Added: The PR_TODO_ITEM_FLAGS property
  • Solved: Deleting properties did not work correctly.
[27-04-2009] - Version 5.0.0 Build 14
  • Solved: When creating a contact message with a Fax number, the fax number wasn't added to the addressbook.
  • Solved: Sending unicode messages did not work correctly with Outlook 2002.
  • Solved: Property Restrictions did not work correctly when used with string properties
  • Solved: The RwGetMapiInfo.DefaultClient did not return a correct value on Windows Vista systems
  • Solved: TRwStringList.AsAnsiString now always returns the data in the codepage of the system
  • Added: TRwStringList.AsMBCS property; This property gives access to the stringlist data in the codepage of the stringlist (when using a MBCS).
  • Solved: Some minor bugs
[02-03-2009] - Version 5.0.0 Build 8
  • Solved: Some minor bugs
[08-12-2008] - Version 5.0.0 Build 5
  • Solved: In some cases no messagetext was returned when using the GetMessageText function (OL2003)
  • Solved: ICS did not work properly on an Exchange 2007 server
  • Solved: Some minor bugs
[21-09-2008] - Version 5.0.0 Build 3
  • Solved: Some minor bugs
[26-08-2008] - Version 5.0.0 Build 2
  • Added: Support for Delphi 2009
  • Modified: Delphi 5 and 6 are no longer supported.
  • Modified: A lot of the Unicode handling code has been rewritten to support Delphi 2009.
  • Modified: The "LogonInfo.UseUnicode" has been removed. Please note that this can cause problems when openening a form and/or datamodule that contains a TRwMAPISession. You can ignore this error (doing so will delete the property from the dfm). In order to use Unicode with Delphi 5 - Delphi 2007 you must compile your application with the UNICODE compiler directive.
  • Added: Incremental Change Synchronisation (ICS) Support. ICS provides a mechanism to monitor and synchronize changes to an information store hierarchy or content. The changes include creating, modifying, and deleting folders and messages. ICS can be used to create applications that need to synchronize data with one ore more Exchange messagestores.
  • Added: Support for reading signed and/or encrypted messages (S/MIME). Easy MAPI will try to automatically decode S/MIME messages. This functionality is only offered with Easy MAPI Professional and Enterprise
  • Added: Messages can now also be saved in rfc822 format (.eml). In order to save messages to .eml format either the SaveToFile or ExportToMime method can be used. When using the SaveToFile the extenion of the filename must be '.eml' in order to save the message as a rfc822 compliant file. The ExportToMime can be used to save the message data to a stream. This functionality is only offered with Easy MAPI Professional and Enterprise
  • Added: Support for binary encoded HTML (in Outlook 2007)
  • Solved: It is now possible to create runtime/dynamic Exchange profiles on an Exhange server without first having to install Outlook.
  • Solved: Some minor bugs in the Meeting Request functionality Rewritten: The way the Example Applications logon to a MAPI session
  • Solved: A bug in the TableEventsMonitor example application
  • Solved: Some bugs in teh MsgStore Appoitnments example application
  • Solved: Some other minor bugs
[23-03-2008] - Version 4.0.0 Build 11
  • Solved: A MAPI_E_COMPUTED exception was raised when trying to save a newly created contact using Outlook 2007 and a POP account.
  • Modified: The MsgStoreEventsTrayMonitor has been rewritten. The application is now based on the Table events and also demonstrates the use of balloon tips.
[14-01-2008] - Version 4.0.0 Build 8
  • Solved: GetPropList() causes an Access Violation in EMSABP32.dll when using Outlook 2003 Service Pack 3 to connect to an Exchange 2003 server.
  • Solved: Some bugs in the IRwRecurrencePattern
  • Solved: The Easy MAPI V4 Designtime package contained a wrong description.
  • Solved: An Access Violation was raised after closing an application that executed the QueryIdentity method (when using Cached Exchange Mode and UseOnlineStore set to False).
  • Solved: Some minor bugs
[09-10-2007] - Version 4.0.0 Build 3
  • Added: Support for Windows Vista
  • Added: The TRwMapiSession.OnSharedConnectionDisconnected This event is triggered when connected to a shared connection and the host of that connection disconnects. This is usefull if you are using Easy MAPI within an Outlook Plugin.
  • Added: IRwMapiMessageSite.RefreshForm You can use this method to force a refresh of an opened/visible Form Manager form. This is usefull when you programmatically make changes to a visible form.
  • Added: IRwMapiTable notifications. Table notifications are the best way to monitor changes to the contents of specific folders, whereas Messagestore notifications are more suited to monitor changes of objects or changes that include multiple folders. The TableEventsMonitor and MsgStoreCheckInbox examples demonstrate how you can use this new TRwMapiTableEvents component.
  • Modified: The various Easy MAPI objects are no longer descendants of TAutoIntfObject. The 2 most important consequences of this change are: 1) The various MAPI objects no longer implement IDispatch 2) Easy MAPI will no longer raise EOleExceptions.
  • Modified: The "V3" part in the name of the various Easy MAPI components and units is now gone. eg. The TRwMapiSessionV3 has now been renamed into TRwMapiSession
  • Modified: RwMAPI_TLB.pas has been renamed in uRwMapiInterfaces.pas
  • Modified: Easy MAPI Lite functionality is now limited to the functionality that Simple MAPI offers. This does NOT mean you can only use Simple MAPI with Easy MAPI Lite.
  • Modified: The IRwMapiAddressBook.ResolveNames method is replaced by the IRwMapiRecipientList.Resolve
  • Solved: Some minor bugs
[26-04-2007] - Version 3.5.3 Build 17
  • Added: Delphi 2007 support
  • Solved: "rtf-encoded-html" that contained unicode characters was not rendered correctly in the TRwWebBrowser
  • Modified: The "IRwMapiMessage.GetMessagePlainText" now always tries to get the "real" plain text. In case of a HTML message the GetMessagePlainText should return the plain text representation of the content of the HTML message
  • Solved: Appointment reminders where off by the GMT deviation of your timezone
  • Solved: Some minor bugs
[21-11-2006] - Version 3.5.3 Build 15
  • Solved: Some minor bugs
  • Improved: The uRwMapiTagsH now contains a lot of new MAPI properties.
[25-07-2006] - Version 3.5.3 Build 12
  • Solved: Some minor bugs
  • Solved: A memory leak in the IRwMapiTable implementation
  • Added: IRwRecurrencePattern.GetFirstOccurrence, IRwRecurrencePattern.GetNextOccurrence With these two new methods it is now possible to determine all the occurrences of a recurring appointment
  • Added: IRwMapiSession.CachedExchangeMode You can use this method to determine wether or not Cached Exchange Mode is being used
[18-04-2006] - Version 3.5.3 Build 3
  • Solved: A memoryleak in the Appointments Recurrence implementation
  • Solved: In some cases the messagetext of HTML messages, created with Microsoft Word, could not be (fully) retrieved
  • Solved: In some cases the messagetext of UTF-8 encoded HTML messages could not be (fully) retrieved.
[25-03-2006] - Version 3.5.3 Build 2
  • Solved: In some cases an EMAPI_INVALID_PARAMETER exception was raised when trying to resolve a recipientlist
  • Solved: In some cases QueryIdentity did not work properly
  • Added: Support for "exceptions" in recurring appointments.
  • Solved: Opening an embedded message attachment did not work with OL2000
  • Solved: It was not possible to open a saved message (.msg) in a form manager form
  • Solved: A "runtime error 216" problem after closing an application that used the TRwWabV3 component
  • Modified: The Delphi 2006 setup. The setup now checks for an "overridden" defaults projects directory
  • Solved: A bug in the UTF8 to Unicode decoding
  • Solved: Some minor bugs
[16-12-2005] - Version 3.5.2 Build 4
  • Added: Delphi 2006 packages in the various setups
  • Solved: A bug in resolving a recipientlist using Simple MAPI.
  • Added: function IRwMapiFormMgr.GetMessageSite(AMessage: IRwMapiMessage): IRwMapiMessageSite; With this new function you can get the messagesite for a given message (opened with or created by the form manager)
  • Added: procedure IRwMapiMessageSite.ShutDownForm(ASaveOption: TRwMapiFormManagerSaveOption); With this new method you can programmatically close a form that is displayed using the form manager
  • Added: procedure IRwMapiMessageSite.Reload; By calling this method you can force a formmanager form to reload it's data from the message.
  • Added: function IRwMapiTable.FindFirst(const Restriction: IRwMapiRestriction): WordBool; function IRwMapiTable.FindPrevious(const Restriction: IRwMapiRestriction): WordBool function IRwMapiTable.FindNext(const Restriction: IRwMapiRestriction): WordBool; function IRwMapiTable.FindLast(const Restriction: IRwMapiRestriction): WordBool; These methods will give you another way of searching MAPI tables (other than the IRwMapiTable.Restrict)
[28-11-2005] - Version 3.5.1 Build 3
  • Solved: Creating new, Exchange based, profiles raised an exception.
  • Solved: HTML statements containing <div> and or <p> were not displayed correctly when the default MAPI form was used (OL2000 and OL2002).
[19-11-2005] - Version 3.5.1 Build 2
  • Added: Task recurrency. It is now possible to create recurring tasks.
  • Added: IRwMapiIPMContactItem.ContactPicture. You can use this new property to get/set the Contactitem picture of an Outlook Contactitem (in OL2003)
  • Added: ftSyncIssues and ftJunkFolder foldertypes (OL2003).
  • Added: IRwMessage.OpenRawMessage When in cached Exchange mode, messages in the OST can be in one of two states:
  • A message in its entirety - with the header and body.
  • A message with only its header downloaded.

Use the OpenRawMessage when requesting an IRwMapiMessage interface for a message in an OST while in cached Exchange mode. Using the OpenMessage to request an IRwMapiMessage interface on a message that has only its header downloaded will force a synchronization that will attempt to download the entire message.

Using OpenRawMessage to request an IRwMapiMessage interface will return interfaces that are identical in use. The only difference is that the IRwMapiMessage interface requested with OpenRawMessage will return an email message as it exists in the OST, without forcing synchronization.

If the message can not be opened in RAW mode (because it is not supported by the Outlook version), the message will be opened by using the OpenMessage

  • Modified: IRwMapiSession.OpenEntry In order to make it possible to bypass the "Cached Exchange Mode" for specific objects, I had to change the argument list for the OpenEntry method. I am aware that this can brake existing code. The new OpenEntry is defined as

function OpenEntry( EntryID: TRwMapiEntryID; AccessLevel: TRwMapiAccessLevel; var ObjectType: TRwMapiObjectType; ForceOnline: WordBool = False; DeferredErrors: WordBool = False ): IRwMapiWrapper;

  • Modified: IRwMapiMessage.OpenMessage In order to make it possible to bypass the "Cached Exchange Mode" for specific objects, I had to change the argument list for the OpenMessage method. I am aware that this can brake existing code. The new OpenMessage is defined as

function OpenMessage( MessageID: TRwMapiEntryID; AccessLevel: TRwMapiAccessLevel; ForceOnline: WordBool = False; DeferredErrors: WordBool = False): IRwMapiMessage;

  • Solved: HTML messages containing a style element were received as empty messages when send with OL2000 or OL2002 and an Exchange 2003 server.
  • Solved: An embedded attachment is now opened with the same access rights as its parent message.
  • Solved: In some cases a call to IRwMapiMessage.ShowForm resulted in a "The Operation Failed" error.
  • Added: PR_ATTACHMENT_CONTACTPHOTO The PR_ATTACHMENT_CONTACTPHOTO property can be accessed as a column on the attachment table obtained through the attachmenttable, or as a property on the IAttach object. If this value is true, then the attachment is the contact picture. The picture is stored as a JPEG formatted file.
  • Added: Borland Delphi 2006 support
  • Solved: In some cases HTML messages send with OL2002 or OL2003 were not formatted correctly.
  • Added: IRwMapiAdminServices.OpenProviderProfileSection You can use this method to get the filename of a given personal folders (pst) file. The SessionConfigureProfile demonstrates how to do this.
  • Modified: The TFrmRwMapiFolderDialog.OnIsValidMessageStore was only fired if the AllowSelectMsgStore was set. This event is now always called (for each messagestore).
  • Solved: In some cases RTF messagetext (text with hyperlinks) could not be read using Easy MAPI.
  • Solved: A bug in the MAPI FormManager that could cause an error when used in combination with Exchange 5.5
  • Added: function MsgStore.OpenFolderByPath(const FolderPath: TRwMAPIString; AccessLevel: TRwMapiAccessLevel; DeferredErrors: WordBool): IRwMapiFolder;

The path must be relative of the root. "Special" folders must be placed in square bracketsExamples:

"//[inbox]" opens the inbox

//[inbox]/mapi" opens the mapi subfolder of the inbox //rapware/easymapi" opens the "easymapi" subfolder of the rootfolder rapware"

The first two slashes may be omitted.

[25-08-2005] - Version 3.5.0 Build 11
  • Solved: Several bugs in the Simple MAPI functionality
  • Solved: Some minor reported bugs
  • Solved: Can be installed side by side in Delphi with Easy Script V3.5.0 build 11
[22-07-2005] - Version 3.5.0 Build 7
  • Improved: HTML support for Outlook 2003 (EM now uses the PR_HTML for Outlook 2003, if available).
  • Improved: Unicode support (Outlook 2003).
  • Improved: The Form Manager. Check out the Form Manager example to see what it is capable of.
  • Improved: All the examples are rewritten. They are now divided in three groups; Basic, Intermediate and Advanced.
  • Solved: A save dialog that popped up in Outlook 2003 when a contact was opened that was created by using Easy MAPI.`
  • Solved: A problem with StickyNotes in the Form Manager. When a StickyNote was created in the Outbox an "Operation Failed" exception was raised when the stickynote was closed.
  • Solved: Several minor bugs in the Form Manager
  • Added: The msoUnicodeOK messagestore option Example: MsgStoreSupportOptions := FMsgStore.PropByName(PR_STORE_SUPPORT_MASK).AsInteger; CanUseUniCode := RwValueInSet(msoUnicodeOK, MsgStoreSupportOptions);
  • Added: IRwMapiMesage.AddRecipient and IRwMapiMesage.AddRecipients. You can take a look at the basic examples to see how these methods can be used
  • Added: Appointment Recurrence. It is now possible to create recurring appointments.
  • Modified: The Appointment SetDateRange and GetDateRange methods. These methods now work with Local datetime values (instead of UTC datetime values)
[17-04-2005] - Version 3.0.2 Build 2
  • Added: The following methods are added to the Form Manager:
  • procedure ReplyToSender(AMessage: IRwMapiMessage; FormRect: TRwMapiRect);
  • procedure ReplyToAll(AMessage: IRwMapiMessage; FormRect: TRwMapiRect);
  • procedure ReplyToFolder(AMessage: IRwMapiMessage; FormRect: TRwMapiRect);
  • procedure ForwardMessage(AMessage: IRwMapiMessage; FormRect: TRwMapiRect);
  • procedure PrintMessage(AMessage: IRwMapiMessage);
  • procedure SaveMessageAs(AMessage: IRwMapiMessage); With these new methods you can use the various Outlook functionality without having to use Outlook Automation.
  • Modified: IRwMapiSession.FlushQueues. With this improved method you can now Send/Receive all messages of all Outlook versions.
  • Solved: A bug (introduced in build 9) in the IRwMapiFormMgr.ShowMessage method. When this method was called 2 forms were displayed instead of one.
  • Solved: Some minor Simple MAPI bugs
[03-04-2005] - Version 3.0.1 Build 9
  • Modified: The Event types of the TRwMapiMsgStoreEventsV3 component.

    IMPORTANT Because of this change your code will be broken if you are using these events. The following events are Modified:

    • OnObjectCreated
    • OnObjectCopied
    • OnObjectMoved
    • OnObjectDeleted
    • OnObjectModified

    These events are now of type TRwMapiOnObjectChanged This type is defined as: TRwMapiOnObjectChanged = procedure(Sender: TObject; AMsgStore: IRwMapiMsgStore; ANotifInfo: TRwMapiObjectNotification) of object;

  • Solved: Not all messagestore events were triggered correctly when using Exchange.
  • Solved: Several issues when running Easy MAPI based applications in a Terminal Server Environment
  • Solved: Several issues when running Easy MAPI based applications on the Exchange 2003 server machine
  • Added: The ftDraft folder type. This will allow you to open the drafts folder by using the OpenFolderByType method.
  • Modified: The algorithm to determine the EntryID of the special folders (Contacts, Drafts, Appointments etc.). The new algorithm first tries to get the EntryID of the requested folder of the MAPI subystem itself.
[22-02-2005] - Version 3.0.1 Build 8
  • Solved: When Word is set to be the mail editor (in Outlook), replying to a message that was opened with the formmanager, could cause an "Operation Failed" exception.
  • Solved: Easy MAPI no langer changes the current directory when logging on to a MAPI session
  • Solved: The IRwMapiMessage.GetRecipientTable did not work when used with Simple MAPI.
[21-01-2005] - Version 3.0.1 Build 7
  • Added: IRwMapiMessage.ModifyReplyRecipients. This new methods allows you to specify the "Reply Recipients".
  • Added: RwCreateConversationIndex (in uRwMapiV3Utils.pas) You can use this method to create a new PR_CONVERSATION_INDEX value. This property must be set if you create a reply or forward message. The fMessage.pas (part of the examples code) demonstrates how to use it.
[13-12-2004] - Version 3.0.1 Build 6
  • Solved: Some minor bugs in the Form Manager.
  • Solved: The GetPropList raised a MAPI error when used in an Exchange 2003, Outlook 2003 environment.
  • Solved: The RTF to Plaintext conversion can now handle messages up to 2 mb.
  • Added: The possibility to create an Exchange based profile in code.
  • Added: The IRwMapiFolder.GetMessageStatus and IRwMapiFolder.SetMessageStatus methods.
  • Added: Delphi 2005 support.
[06-11-2004] - Version 3.0.1 Build 5
  • Solved: A minor bug in the "outlook rtf encoded html" to html conversion function. In some cases the html of html messages, received in OL2003, where not converted correctly
  • Solved: The RwMapiUninitialize procedure disconnected all MAPI sessions of all threads.
  • Solved: A bug in the IRwMapiRestrictionSub restriction.
[02-10-2004] - Version 3.0.1 Build 4
  • Solved: Simple MAPI exceptions where "eaten" by Easy MAPI.
  • Solved: It was not possible to open attachments when using Simple MAPI.
  • Solved: The EasyMAPI.chm helpfile did not have any contents.
  • Solved: When using OL2000 in IMO mode the AddressBook.ResolveNames and Message.ModifyRecipients could raise an EMAPI_INVALID_PARAMETER exception.
[20-09-2004] - Version 3.0.1 Build 3
  • Solved: When a new IPM.Contact item is created a corresponding addressbook mailuser is also created (one for every mailaddress).
  • Added: IRwMapiAddressbook.BeforeDisplayAddressBookDlg event. With this event you can change the look and feel of the Addressbook dialog.
  • Solved: A minor bug in the ConvertRTFStreamToHTMLStream method.
  • Solved: An AV when closing an application that still has form open that are opened with the MAPI Form Manager.
  • Added: The "UseOnlineStore" property. If Outlook 2003 is running in Cached Exchange Mode, any Extended MAPI applications that log on to the same session (LogonInfo.Shared = True) are also connected to the cached message store. Any data that is accessed and any changes that are made will be made against the local copy of the mailbox. Sometimes, you do not want this to occur. In that case you must set UseOnlineStore to True and LogonInfo.Shared to False.

Note: The UseOnlineStore property will not permit the Exchange store to be opened in cached mode and in non-cached mode at the same time in the same MAPI session. If you have already opened the cached message store, you must either close the store before you open it with this property set to True or open a new MAPI session where you can open the Exchange store on the remote server by using this property.

  • Added: IRwMapiSession.OpenProfileSection
[10-07-2004] - Version 3.0.1 Build 0
  • Solved: A memoryleak in the TRwMapiObjectList
  • Solved: Easy MAPI applications sometimes freeze after logging off.
  • New: Easy MAPI now contains some functions that make it a lot easier to use Easy MAPI in combination with Outlook COM components. These functions are:
    • WrapMapiMessage
    • WrapMapiFolder
    • WrapMapiMsgStore
  • Added: An Add-In Express (see https://www.add-in-express.com/ for more info) based Outlook plugin. This plugin demonstrates how you can use the Outlook COM model in combination with Easy MAPI and Add-In Express.
[27-06-2004] - Version 3.0.0 Build 16
  • Added: You can now assign a recipient to a Task and send a TaskRequest to that recipient (Enterprise Edition Only). The MsgStoreTasks example demonstrates how you can do this.
  • Solved: Named Properties of type MNID_STRING could not be retrieved
  • Solved: The messagetext of a HTML message that contained the >PRE< tag was not displayed correctly
  • Solved: The IRwMapiProp.Properties.Count did not return the number of properties. It always returned 0.
  • Added: Several Named Property constants
  • Modified: The Contacts example. Contacts added with this modified example can also be used as recipient.
[20-06-2004] - Version 3.0.0 Build 15
  • Modified: When you create a new meeting (IPM.Meeting) you will now get an IRwMapiIPMMeeting interface instead of an IRwMapiIPMAppointment. Please note that you must make changes in your code if you were already using this functionality! You can take a look at the fAppointment.pas and fMeeting.pas how to use this new interface.
  • Added: IRwMapiMessage.LoadMessageTextFromStream and SaveMessageTextToStream methods
  • Added: IRwMapiMessage.Reply.
  • Modified: Meeting functionality. You can now send, accept, decline and tentativily accept meeting invitations.
  • Modified: Example projects: MsgStoreContent.dpr and MsgStoreMsgStoreParser.dpr. These examples now display the content of all messagestores, instead of just the default messagestore.
[14-06-2004] - Version 3.0.0 Build 14
  • Modified: Everything!! Easy MAPI V4 is NOT a modified Easy MAPI V2. It has been redesigned from the ground up and is now even easier, faster and generally superior. It is based on interfaces and reference counted objects. Because of this you will not be able to compile your existing Easy MAPI V2 projects with Easy MAPI V4.
  • New: Table restrictions. Easy MAPI V4 now fully supports the MAPI table restrictions
  • New: The IRwMapiFormMgr. With the new form manager you can open/run standard mail client forms for the various message objects (messages, appointments, tasks etc.). These forms can be opened non-modal! You can also use the form manager to create new message objects.
  • New: Various EntryID functions. You can now get all kinds of interesting information about an EntryID. eg. You can determine wether or not a given EntryID is a short-term or long-term EntryID.
  • New: Invitations. With Easy MAPI V4 you can send appointment invitations. The Appointment example demonstrates how to do this.
  • Improved: Examples & Helpfile
  • Improved: Performance
  • Improved: Named property support
  • Improved: IPM.DistList support.
  • Improved: Simple MAPI memory management
  • Improved: Impersonation functions. There are now specific impersonation functions you can use in IIS (=Isapi) environments. There is an Isapi example that demonstrates how you can use this.
  • Solved: A lot of minor bugs were solved in Easy MAPI V4
[14-6-2004] - Version 2.6.2 build 14
  • Solved: "An error occurred while freeing a MAPI buffer!" when working with a recipientlist
  • Solved: Sending messages to OneOff FAX recipients did not work
  • Modified: The directory & packages structure; The package directory now looks like this: \RAPWare\source\components\mapi \RAPWare\source\components\mapi\headers \RAPWare\source\components\mapi\mapiv2 Because of this you can run Easy MAPI V2623 side by side with Easy MAPI V4xxx
  • New: The TRwWebBroser component and the uRwMapiWebBrowser unit. You can use this webbrowser to display the content of html images.
  • Modified: The setup now places the bpl's in the \Borland\DelphiX\Projects\Bpl directory.
[10-04-2004] - Version 2.6.2 build 2
  • Solved: "An error occurred while freeing a MAPI buffer!" when opening an Addressbook Dialog in Simple MAPI with a filled recipientlist
  • Improved: Reading the messagetext of HTML messages.
  • Modified: fMessage.pas. The message form now also displays the embedded images of HTML messages.
  • Improved: Reading and writing speed of attachments
[17-02-2004] - Version 2.6.2 build 1
  • Solved: Both the html encode and decode algorithms are rewritten. Because of this several HTML compatibility issues are solved.
  • Solved: The suppressdialogs argument in the TRwMapiMessage.SubmitMessage dit not work properly.
[03-02-2004] - Version 2.6.1 build 10
  • Solved: When reading properties of the contenttable the read flag of a Simple MAPI message was set.
  • Solved: The HTML messagetext of rtf encoded (Outlook style) html messages was not always correct
  • Modified: The message form in the examples. This form now displays html formatted code. The attachment handling is also improved.
[20-11-2003] - Version 2.6.1 build 8
  • Solved: The TRwIPMContact.HomeAddressPostalCode did not return the correct value.
  • Solved: The FindContact method raised an exception when used to locate a ContactItem in an Exchange 55 mailbox.
  • Modified: Example 16 (Easy MAPI as Windows NT Service) You can now run Example 16 under the Local System Account. In order to do this you will have to compile this example with the IMPERSONATE conditional define. You can find more info in the uMain.pas file of example 16.
  • Added: uRwImpersonate.pas (see Example 16). This unit contains a procedure that will allow you to impersonate another user. You can use this to run Easy MAPI Windows NT Services under the local system account.
  • Added: Example 25. This example demonstrates how you can read/write a custom property value to a contact item.
[5-11-2003] - Version 2.6.1 build 5
  • Added: Overloaded method of TRwMapiMsgStore.OpenFolder. With this new method you can perform a recursive search if you want to open a folder by name.
  • Solved: Various MAPI logon flags were not interpreted correctly.
  • Improved: The addressbook performance.
[26-10-2003] - Version 2.6.1 build 2
  • Added: TRwExchangeManageStore (Enterprise Edition Only) With this component you can access all mailboxes on an exchange server. Example 24 demonstrates how you can use this component. You will need to setup a profile with privileged access in order to use this component.
  • Added: TRwMapiMsgStore.MessageStoreID. You can use this to open a messagestore by it's ID.
  • Solved: The TRwIPMAppointment.AllDayEvent did not work properly if you were not in a GMT+1 timezone.
  • Solved: Opening a contenttable, one that only contains unread messages, with Simple MAPI raised an exception in case there were no unread messages.
  • Solved: The TRwMapiMessage.ReceivedOn always returned '31/12/1899' when using Simple MAPI.
[10-07-2003] - Version 2.6.0 build 7
  • Solved: When the HTML code of an embedded image in a HTML message contained a carriage return, the embedded image was not displayed correctly. Instead of the embedded image a placeholder was shown.
  • Added: Overloaded TRwMapiMessage.CreateEmbeddedAttachment method. With the new overloaded method it is possible to specificy a contentID.
  • Solved: Example 3 contained some debugcode. Because of this only plain text messages were sent.
  • Solved: When using OneOff addresses, the displayname was set to the emailaddress.
  • Solved: A bug in the TRwMapiBaseAddressbook.Details method. The DIALOG_MODAL flag should have been set.
  • Added: Overloaded version of TRwMapiAddressBook.DisplayRecipOptionsDialog. This overloaded version gives you the possibility to specify a recipientlist.
[16-06-2003] - Version 2.6.0 build 5
  • Solved: In case of an RTF messagetext the TRwMapiMessage.MessageFormat property was ignored. In this case the MessageFormat was assumed to be mfRTF.
  • Added: Example 23. This example demonstrates how you can work with DistributionLists
  • Added: TRwIPMDistList.AddItem and TRwIPMDistList.RemoveItem. With these two methods you can add & remove contactitems from a DistributionList
  • Added: TRwMapiMsgStore.FindDistList. With this method you can locate the DistListItem (=item in Outlook Contacts folder) of a given Distribution List (=item in addressbook)
  • Solved: When an appointment was created for a specific time, the given time was not used. In this case the appointment was created with a start- and endtime of 0:00.
  • Solved: Resolving Distributionlists without a displayname caused an error.
  • Modified: TRwMapiMessage.SaveMessageTextToStream. The argumentlist of this method has changed. Instead of "WantRTF" you can now specify the "OutputFormat" you want. This argument is of type TRwMessageTextOutputFormat. The following are vaild values:
  • mtofRAW = Get the RAW messagetext.
  • mtofPlainText = Always return plain text. In case of HTML the HTML code will be returned.
  • mtofMessageFormat = Get the text in the messagetextformat.
  • Solved: The RwUTCToLocal did not return the correct time when the LocalTimezone is in Daylight Saving Time
  • Added: TRwMapiAddressbookParser. With this new component you get easy access to the addressbook content. The TRwMapiAddressbookParser works similar like a XML SAX parser; It loops/runs throught the various addressbookcontainers and an event is fired for every found object (container, messaging user, distributionlist etc.)
  • Added: TRwMapiMsgStoreParser. With this new component you get easy access to the messagestore content. The TRwMapiMsgStoreParser works similar like a XML SAX parser; It loops/runs throught the various messagestore folders and an event is fired for every found object (folder, message etc.)
  • Added: Support for IPM.Task messages.
  • Modified: RTF encoded HTML messages are now treated as real HTML messages (instead of RTF). The MessageText property of such messages now contain the real HTML code.
  • Modified: The TRwMapiFolderDialog now returns a long-term entry identifier in Exchange Environments.
  • Modified: The TRwMapiFolderDialog now also supports non default messagestores.
  • Modified: TRwMapiAddressbook.BeforeDisplayAddressBookDlg event. The "ADRPARM: PADRPARM" parameter is replaced by a more accessible parameter "AddrBookDlgParams: TAddrBookDlgParams"; This event can be used to make minor modifications to the dialog that is being displayed.
[17-05-2003] - Version 2.5.0 build 15
  • Added: Example 20. This example demonstrates how you can browse the inbox and get data from the messages in the inbox.
  • Modified: The MapiMsgStore.FindContact can now also find corresponding contactitems based on the email address of a given messaging user.
[07-05-2003] - Version 2.5.0 build 13
  • Solved: If a HTML message was sent to a client without HTML support, this client received a blank message.
  • Solved: Example 2, Simple MAPI: Double clicking on a recipient raised an AV.
  • Modified: Some minor modifications to the examples
  • Modified: TRwMapiSession.QueryIdentity; It is now possible to open the returned object in readwrite mode.
[01-05-2003] - Version 2.5.0 build 10
  • Solved:
    1. Create a new address in your addressbook with the displayname "test" and email test@somewhere.com
    2. Run Example 5
    3. Type in "Test"
    4. Press Resolve. As you can see the PR_EMAIL_ADDRESS is emtpy, it should have been "test@rapware.com"
    5. Run Example 3
    6. Send the demo HTML message to "Test"
    7. Press send The message is send to yourself instead of "test@rapware.com"
  • Solved: Outlook 2000, Internet Only Mode
    1. In Outlook, position your cusor on the Personal Folders in the folder list.
    2. Then, using Example 3 send a HTML message to someone with an OE6 client. You will see the message is sent and recieved correctly.
    3. Next, position the cursor on the Outbox in the Outlook folder list
    4. Send another message using Example 3. The email stays in the outbox and is not sent. You have to open it and press send. HERE'S THE PROBLEM - the email arrives without any text. Only the image is shown as an attachment!
  • Added: The possibility to set binary property values
  • Added: Various TRwRecipient properties. With the added properties you can access all available "MAPI Properties" of a recipient. Take a look at example 5 for a demonstration.
[29-04-2003] - Version 2.5.0 build 9
  • Solved: TRwMapiAddressBook.CreateDistList() create a messaging user, instead of a Distribution List.
  • Solved: When using Simple MAPI, HTML messages were sent as plain text.
  • Solved: Creating distributionlists when using Outlook 2000 configured in Internet Only Mode (=WAB) raised an AV in Wab32.dll
[28-04-2003] - Version 2.5.0 build 8
  • Added: function TRwMapiMsgStore.FindContact(AMessagingUser: TRwMapiMailUser): TRwIPMContact; With this method you can locate the ContactItem (=item in Outlook Contacts folder) of a Messaging User (=item in addressbook)
  • Solved: OneOff addresses with a displayname equal to a name in the addressbook are send to the recipient as mentioned in the addressbook (instead of the recipient as mentioned in the OneOff address).
  • Modified: Example 4 is rewritten. This example demonstrates how you can use Easy MAPI to view/modify/delete/add various MAPI objects (Contacts, Appointments, Distribution Lists, Messages etc.)
  • Modified: We improved the TRwMapiTable object. The new TRwMapiTable now supports:
    • Restrictions (Filters, see example 6)
    • A Fields property

The TRwMapiTable is no more like a TDataset component With the new Fields property you can

  1. easily find out what fields are available
  2. add/remove fields
  3. get easy access to field values with the AsString, AsInteger etc. properties
  • Modified: We improved the TRwMapiProp object.

    • Improved Named Property support
    • A new columns property With this new property it is easier to access the various properties of a MAPI object
    • Added TRwMapiProp.DeleteProp
    • Added most common MS Outlook named properties
    • Changed the Save method. The save methods now takes an Easy MAPI type as argument instead of a MAPI type.
    • The PropertieList is refreshed after a call to the save method
  • Added: Other IPM.... Messageclasses The TRwMapiMsgStore.OpenMessage and TRwMapiFolder.CreateMessage can now open and create Different kinds of MAPI objects. You can now create, open, modify and delete IPM.Contact items, IPM.StickyNotes, IPM.DistList items and IPM.Appointments items. Example 4 demonstrates how you can use this. Example 19 demonstrates how you can use this feature to view and create appointments.

  • Modified: We changed the argumentlist of the various open.... methods. The various open... methods (like OpenFolder, OpenContainer etc.) almost all took the following two parameters:

    • ABestAccess
    • AReadOnly

These parameters are now substituted by one: "AAccessLevel". This parameter is of the type TRwMapiAccessLevel and can be one of three values:

  • alBestAccess
  • alReadOnly
  • alReadWrite

This modification can break existing code.

  • Solved: A HTML message created by Easy MAPI appears to be a blank message when viewed in the Outbox of Outlook.
  • Solved: Some minor issues
[05-03-2003] - Version 2.0.1 build 23
  • Solved: Example 6 contained a reference to a non existing unit (uRwStorage.pas).
  • Solved: The RecipientList of a new message was not applied when executing the TRwMapiMessage.ShowForm in a Simple MAPI session. Because of this bug recipients that were added to the recipientlist did not show up in the form.
[05-03-2003] - Version 2.0.1 build 22
  • Solved: When using Simple MAPI, the recipientlist sometimes "lost" data.
  • Solved: The propertylist was not refreshed after a TRwMapiMessage.ShowForm
  • Solved: The PR_ROWID was not set in TRwMapiRecipientList.GetMapiAddressList
  • Solved: Plain text messages that were sent using Simple MAPI always contained a HTM file attachment.
  • Solved: In some cases a winmail.dat attachment was sent with plain text messages.
[01-03-2003] - Version 2.0.1 build 15
  • Added: The TRwWab component. With this new component you get full and native access to the Windows Addressbook.
  • Added: Example 17 & 18. Both examples are Addressbook examples and have (almost) the same user interface, However example 17 uses the MAPI Addressbook component and example 18 uses the new WAB component
  • Added: The property TRwMapiMessage.ReadReceiptRequested: Boolean The ReadReceiptRequested property must contain TRUE if a message sender wants the messaging system to generate a read report when the recipient has read a message.
  • Added: The TRwMapiAdminServices object.You can use this object to make changes to a message service within a profile. Another use of this object is to dynamically load and unload Outlook PST files (see example 4).
  • Added: TRwMapiBaseAddressbook.CreateUser With this method you can add a user to a given container (or default container) This method displays the standard addressbook "new user dialog"
  • Added: TRwMapiBaseAddressbook.CreateDistList With this method you can add a distributionlist to a given container (or default container) This method displays the standard addressbook "new distribution dialog"
  • Added: TRwMapiDistList.AddUser. With this method you can add users to a distributionlist
  • Added: TRwMapiMessage.MessageFormat property. With this propery you can set the messageformat before you send the message.
  • Added: The following properties are added to the TRwMapiMailUser
    • property SMTP: string
    • property Telephone: string
    • property CreationDateTime: TDateTime
    • property ModifiedDateTime: TDateTime
    • property Account: string
    • property Attribute: string These properties are Outlook only properties!
  • Added: procedure TRwMapiMessage.CreateEmbeddedImageAttachment(AFilename: string); This method can be used to add images as embedded attachments (in case of HTML messages). See Example 3
  • Added: We added some overloaded CreateAttachment methods
  • procedure CreateAttachment(ADisplayName: string; AAttType: TRwMapiAttachmentType; AFileName: TFileName); overload;
  • procedure CreateAttachment(ADisplayName: string; AStream: TStream); overload;
  • procedure CreateAttachment(ADisplayName, AFilename: string; AStream: TStream); overload;
  • Added: Now you can read the messagetext of a IPM.StickyNote message.
  • Modified: The TRwHierarchyTable.OpenContainer is removed. This method did not work properly in Simple MAPI environments. If you want to open a container you must use the TRwMapiAddressbook.OpenContainer or TRwMapiMsgStore.OpenFolder instead.
  • Modified: Example 3 now demonstrates how you can add a new message using: 1) The default MAPI form 2) a custom made Delphi form
  • Modified: The TRwMapiRecipient is now an object (instead of a record). This object has a method "OpenRecipient". With this method you can open a recipient from a recipientlist. Example 5 demonstrates how this can be done.
  • Modified: The property "Recipient" from the TRwMapiRecipientList is now the default property.

Instead of using MapiAddressBook.RecipientList.Recipient[i] you can now use the shorter MapiAddressBook.RecipientList##### [i] notation. hanged: uRwMapiRecip.pas is removed. The code from this unit is placed in uRwMapiBaseAddressbook.pas.

  • Modified: Much better WAB support when using Simple MAPI
  • Modified: MapiAddressBook.DisplayAddressDialog method. This method now has an extra parameter.
  • Modified: Example 15 now works with new Intraweb V5.1
  • Modified: If AttachmentTable properties now return empty ('') if they are empty instead of 'unknown ..'
  • Modified: Easy MAPI now fully supports the PR_BODY_HTML property.
  • Modified: In case of HTML messages the attachment paperclip is now suppressed (in Outlook).
  • Modified: Some basic (low-level) objects are removed, replaced and/or rewritten. This is because of the upcoming release of the RAPWare MAPI Addressbook provider,
  • Modified: Embedded images in HTML messages now get a "content id" (see example 3)
  • Modified: Example 2.
  • Modified: The property TRwMapiSession.WindowHandle: HWND is now read/write instead of read only. By setting this property you can specify wich form will get the focus after closing a MAPI dialog.
  • Solved: Activating a TRwMapiMsgStore while it was already active caused messagestore events to be fired more than once for a single event.
  • Solved: The Winmail.dat problem with HTML messages to OneOff recipients. If you set the messageformat to mfHTML the OneOff recipients will not receive the winmail.dat file.
  • Solved: In some specific situations an AV was raised when using the W AB in combination with Outlook XP without the Outlook Addressbook installed.
  • Solved: Sending RTF messages in a Windows NT service raised an exception.
[29-01-2003] - Version 2.0.0 build 20
  • Solved: The FlushQueus method raised an exception
  • Solved: In certain cases an exception was raised while sending messages with Simple MAPI
[20-01-2003] - Version 2.0.0 build 19
  • Modified: Example 3 is rewritten. This example now shows how you can send Plain Text messages, RTF messages and HTML messages with embedded images.
  • Added: TRwMapiTable descendants can now be sorted. See example 6.
  • Solved: HTML messages send by Easy MAPI were displayed correctly in Outlook, but not in Outlook Express
  • Solved: An exception was raised when you tried to get the FolderType of a folder which was located in the "Archive" messagestore.
  • Modified: We added a ParentID to the parameterlist of the OnNewMessage, OnObjectMoved, OnObjectCreated events With this extra parameter you can check in which folder a message is created or from which folder a message is moved (and to what folder the message is moved).
  • Solved: After resolving an OneOff address the displayname was reset to the name description part. The resolving process removed the EMail part from the displayname.
[03-12-2002] - Version 2.0.0 build 15
  • Solved: A memoryleak in the TRwMapiProp component
  • Solved: The GetRTFSync raised an exception in some situations
[02-12-2002] - Version 2.0.0 build 13
  • Added: All Easy MAPI components now also support Simple MAPI
  • Added: The TRwMapiAddressbook now also supports the Windows Addressbook
  • Added: Use the TRwMapiSession to check out what MAPI interface(s) are available
  • Added: You can now add recipients in the OneOff format (like Peter p.wolters@rapware.com)
  • Added: Use the TRwMapiStatusTable to determine the status of MAPI Resources. In exchange environments you can use this to determine if you are working offline or online.
  • Added: We have added a TRwMapiFolderDialog component (See Example 3)
  • Added: We added a 100% Borland code Service Example (Example 16)
  • Added: We added the uRwMapiOutlook.pas unit. This units contains some methods you can use to combine Easy MAPI with Outlook Automation
  • Added: We added the TRwMapiFolder.FolderType property.
  • Added: We added documentation about the MAPI Login procedure (See Example 1)
  • Added: We added documentation about sending RTF mail (See Example 4 and "Notes on RTF".htm in the Example 4 directory)
  • Modified: We improved the MAPI dll loading and unloading mechanism
  • Modified: We rewrote the TRwMapiTable (and descendants) object. With the improved TRwMapiTable you can move through the recordset without actually retrieving the data. We also removed the "TRwMapiTable,Row" property.
[18-10-2002] - Version 1.0.9 build 6
  • Added: Example 13: Outlook COM and Easy MAPI working together (Delphi 6)
  • Added: Example 14: Easy MAPI as NT-Service (requires SvCom)
  • Added: Example 15: Intraweb example (requires Intraweb)
  • Solved: When saving the attachments of a saved message an exception was raised.
[26-09-2002] - Version 1.0.9 build 3
  • Added: Delphi 7 support
  • Added: TRwMapiMessage.SaveMessageToDisk. With this method you can save messages as .msg files.
  • Added: TRwMapiMsgStore.OpenSavedMessage. With this method you can open saved messages.
  • Added: TRwMapiFolder.CreateMessageFromTemplate. You can use this method to create new messages, based on previously created (or saved) messages.
  • Modified: TRwMapiAddressBook.DisplayAddressDialog. You can now specify which button should get the focus when the dialog is displayed.
[07-09-2002] - Version 1.0.8 build 7
  • Solved: Sending RTF mails with Outlook 2000 to Outlook 2000 did not work.
[28-08-2002] - Version 1.0.8 build 6
  • Solved: The attachment table was not handled correctly.
  • Solved: Example 11 - "Empty folder" did not empty the selected folder, but the parentfolder of the selected folder.
[23-08-2002] - Version 1.0.8 build 5
  • Added: We added a method to retrieve the default profile.(TRwMapiSession.RetrieveDefaultProfile).
  • Modified: The MAPI session now uses the Application.Handle if no other form handle is available.
  • Modified: It is now possible to initialize more then 1 mapi session (for multithreaded applications)
  • Solved: Easy MAPI could not handle large address-, hierarchie- & contenttables. In order to solve this bug we had to make some major changes to our TRwMapiTable object. Because of this you can no longer use for statements to browse through tables. You must now use While not table.eof do begin // do something table.next End; You can also take a look at the examples (example 2 or 6) to see how tables must be used.
[03-07-2002] - Version 1.0.7 build 7
  • Solved: The NewMessage and PostMessage parameters in the TRwMapiMessage.ShowForm method were not used.
  • Solved: Access Violation in MSMAPI32.DLL caused by assigning Recipientlists
  • Solved: Sharing Violation in CreateAttachment. We now open files in fmShareDenyNone mode instead of fmOpenRead
  • Solved: We removed the three warnings
[20-06-2002] - Version 1.0.7
  • Added: The TRwMapiMessage now has a ShowForm method. By calling this method the MAPI message handler form pops up (Build 6)
  • Solved: Reading the messagetext of a message that does not contain messagetext caused an exception. (Build 5)
  • Solved: The TRwMapiSession could not be placed on MDI-Child forms (Build 5)
  • Added: We added support for Distribution Lists. Example 2 is modified to demonstrate this.
  • Added: We added folder management support (movefolder, deletefolder, emptyfolder, copyfolder etc.)
  • Solved: The readonly parameter in the "OpenUser" method did not work correctly
  • Modified: The "GetPropTagByName" now has an optional "Create" parameter. By setting "Create" to true you can create named properties.
[14-05-2002] - Version 1.0.6
  • Added: We added the MessageSubmitTime property to the TRwFolderContentTableRow.
  • Added: We added the possibility to flush the message queus (see example 6)
  • Added: We added the possibility to copy and move messages from one folder to another (see example 6)
  • Solved: We stripped the "\fromhtml1" from incoming HTML messages. You now only get the HTML text.
  • Solved: The Filename property of new "atByValue" attachments was not set if you created this attachment based on a file.
[17-04-2002] - Version 1.0.5
  • Added: Support for HTML mail (take a look at Example 3).
  • Added: If you don't specify a MessageStoreName in the TRwMapiMsgStore the default messagestore will be used when set to active
  • Added: The TRwHierarchieTableRow now also has a ContainerClass property.
  • Added: Support for Named Properties (take a look at Example 9) function GetNamesFromIDs(var Count: ULONG): PPropNames; function GetPropTagByName(APropName: string): ULONG; procedure GetNamedProps(AStrings: TStrings);
  • Added: Extra (Outlook) folder types added (ftContact, ftTask, ftJournal, ftAppointment, ftStickyNote) e.g. If you open a ftContact folder you can browse the contactitems and if you open a contactitem you can now also read/write the Named Properties (custom properties).
  • Solved: When resolving an incomplete name, that can be resolved automatically, the DisplayName is now set to the resolved displayname.
[02-04-2002] - Version 1.0.4
  • Modified: Example 6 now also shows subfolders
  • Modified: TRwContentTable renamed to TRwFolderContentTable.
  • Added: Improved Addressbook support. You can now read/write Mailuser properties and also create new mailusers. Take a look at example 2 to see how this is done.
  • Solved: If the RwSetMapiInitialized(False) was not called before the application was terminated an exception (E_MAPI_INVALIDPARAMETER) was raised.
  • Solved: Messages of class "IPM.Activity" could not be opened.
  • Added: DeleteMessage method. Now you can also delete messages.
  • Modified: TRwMapiMsgStore.OpenFolder. Now there are three overloaded methods to open a folder
  • Solved: Binary attachments caused exceptions in non exchange environments.
  • Solved: If the MAPI session was not closed before the form it was placed on was destroyed, an AV would occur.
  • Solved: We renamed the converted headerfiles to uRw....pas. Easy MAPI would not run if another toolkit that used these headerfiles was installed.
[16-03-2002] - Version 1.0.3
  • Added: Support for MAPI Messagestore Notifications (incoming messages events etc.)

[5-11-2001] - Released: Version 1.0.0