12/29/2007
Version 4.5.0.812
New features:
Exposed Incremental Change
Synchronization (ICS) API for the Exchange folders. ICS API allows to
perform synchronization of any Exchange folder without using events (which
are unreliable and can be dropped under heavy loads) or looping through all
items in a folder (which is very inefficient). This is the same API used for
synchronization by the cached Exchange store provider in Outlook. See
RDOFolderSynchronizer object
(returned by
RDOFolder2.ExchangeSynchronizer)
for more information and examples.
set Session = CreateObject("Redemption.RDOSession") 'set Folder = Session.GetDefaultFolder(olFolderInbox) 'no data at first run, this really needs to come from some persistent storage saved after the previous sync
' (see the last line in the sample), otherwise all items in the
folder will be returned set SyncItems = Synchonizer.SyncItems(strPreviousSyncData) Debug.Print "There were no changes in the folder" Else
Debug.Print "There were " & SyncItems.Count & " changes in the folder. The
list of changes follows:" EndIf
' IMPORTANT: remember/store the sync cookie to be used next
time when calling SyncItems (see above) |
Exchange Server in the online
mode limits the number of simultaneously open MAPI objects (see
KB 830829)
and returns MAPI_E_CALL_FAILED when attempting to open more objects.
Since
.Net does not release COM objects immediately (resulting in Redemption
objects holding a reference to the underlying MAPI objects), it is easy to
run over the limit, sometimes even if Marshal.ReleaseCOMObject() or
GC.Collect() are used to explicitly release Redemption (and hence MAPI)
objects, especially if multiple dot notation is used (resulting in implicit
variables created by the compiler). This problem manifests itself most frequently
when looping through a large number of messages in a folder.
This version of Redemption keeps track of the open MAPI objects and transparently
releases the objects that can easily be reopened on demand (only oldest unmodified
or saved objects are automatically released). This is done transparently, no
change to the existing code is required. Note that only the internally
used MAPI objects are automatically released and reopened (if necessary),
Redemption objects stay alive.
Messages (RDOMail), attachments
(RDOAttachment), folders (RDOFolder),
folder content tables (RDOItems), hierarchy tables
(RDOFolders), attachment tables (RDOAttachments)
and ACLs (RDOACL) are
tracked for automatic release.
Added
RDOSession.LogonPstStore
method that, in addition to the Logon and LogonExchangeMailbox
methods and setting the MAPIOBJECT property, allows to log to MAPI.
LogonPstStore, similar to the LogonExchangeMailbox method,
creates a temporary profile, adds the specified PST store (new or existing)
to that temporary profile, and log to the profile. The temporary profile is
immediately deleted, so it will never be visible to an end user.
LogonPstStore is useful if you need to process a PST file without
explicitly creating a new profile using ProfMan
and/or without adding the temporary PST store to an existing profile using
RDOSession.Stores.AddPstStore:
|
'create initialize first
RDOSession object that shared the MAPI session with Outlook |
Added support for the field
aliases (AS operator) in the SQL expressions in
MAPITable.ExecSQL,
RDOItems.Find/Restrict
methods. Useful to keep SQL queries readable as well as if the recordset
returned by ExecSQL is used by other routines that expect recordsets
with predefined field names.
|
'Aliases. Select all
messages replied to
set Table = CreateObject("Redemption.MAPITable") |
Added RDOPOP3Account.DeliverToStore / DeliverToFolder / SaveSentMessageFolder properties (Outlook 2007 specific)
You can now specify folder fields
(visible in the Field Picker for a given folder and accessible through the
RDOFolder2.FolderFields
collection) in a SQL query (MAPITable.ExecSQL
and
RDOItems.Find/Restrict).
Custom property names can be
specified either in the DASL format (e.g. "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/PropertyName")
or simply as the property name (e.g. "PropertyName"). The
previous version of Redemption always assumed a string property type (since
the property type cannot be specified in the "string" DASL namespace) for
such properties.
Calendar Access Control rights (Exchange): added RDOACE.FreeBusySimple and RDOACE.FreeBusyDetailed properties (Outlook 2007 / Exchange 2007 specific)
MAPITable.ExecSQL performance was significantly improved for the queries with no restriction (no WHERE clause).
Redemption now supports Exchange 2007 without Public Folders (standalone MAPI download only). You will need to set a special registry key to force Redemption to use the CONNECT_IGNORE_NO_PF flag when calling RDOSession.LogonExchangeMailbox. Note: Redemption does not use CDO 1.21 (which Outlook 2007 does not even install) in any way, it just can reuse the same registry key that Microsoft documented for use with CDO 1.21.
RDOAddressEntry object: added NTAccountName, NTAccountSid, Alias (Exchange specific), AssistantName, BusinessTelephoneNumber, City, Comments, CompanyName, Department, FirstName, JobTitle, LastName, MobileTelephoneNumber, OfficeLocation, PostalCode, StateOrProvince, StreetAddress properties.
Redemption will automatically set the value of the RDOMail.InternetCodePage property (unless it was explicitly programmatically set) whenever a string property (Subject, Body, etc) is set to a Unicode string with the code page different from the current user code page.
Added MAPITable.CreateBookmark, FreeBookmark, GoToBookmark, GoToNext, GoToPrevious methods.
Improved performance of the RDOMail.CopyTo method. The performance of the RDOMail.SaveAs(..., olMsg) and RDOMail.Import(..., olMsg) methods was also improved as the result of this change.
Improved performance of the RDOFolder.CopyTo method for the Exchange folders residing in different stores (e.g. 2 Exchange mailboxes, or an Exchange mailbox folder and an Public Folders folder).
RDOAttachments.Add can now take another
RDOAttachment object (all attachment
properties are copied) or a variant array of bytes (assumed to be the raw
attachment data) besides a string (file name) or another message
(RDOMail) in the Source argument.
Added
SafeInspector.RtfEditor.SelAttributes.BackColor
property that allows to retrieve and set the background text color.
Added
RDOSession.CreateMessageFromMsgFile
method which returns a new message (RDOMail or
one of the derived types, such as RDOContactItem)
created on top of a new MSG file.
Unlike RDOSession.GetMessageFromMsgFile
(which can also create a new MSG file), you can specify the MSG file format
(default, Unicode, ANSI) and the message class of the new item so you
will always get back the right item kind rather than the generic
RDOMail.
| 'Create a contact (can be any other type of item) on top of a new
MSG file 'Below we will get back a contact since we explicitly specify the message class ("IPM.Contact"). 'The MSG file will be created in the Unicode format for Outlook 2003 or higher or ANSI format 'for the older versions of Outlook (since mffDefault = 1 is used) 'The last two parameters are optional set Session = CreateObject("Redemption.RDOSession") Session.Logon 'don't really need to call this method set Contact = Session.CreateMessageFromMsgFile("c:\temp\TestContact.Msg", "IPM.Contact", 1) Contact.FirstName = "Dmitry" Contact.LastName = "Streblechenko" Contact.EMail1Address = "redemption@dimastr.com" Contact.Save |
Bug fixes:
07/23/2007
Version 4.4.0.714 This version does not introduce any new functionality, but only fixes several issues introduced in the previous versions.
Bug fixes
No IMsgStore-level events (RDOStore, RDOFolder and RDOMail events) were fired in version 4.4.0.674. RDOStores, RDOItems and RDOFolders events were Ok.
MAPITable.ExecSQL, RDOItems.Find/Restrict methods did not handle single quotes (encoded as double quotes) under certain circumstances (e.g. " SELECT FileAs, EntryID FROM Folder WHERE LastName = 'O''Connor' ")
MAPITable.ExecSQL, RDOItems.Find/Restrict methods dropped some conditions for the WHERE clauses with a large number of conditions.
MAPITable.ExecSQL, RDOItems.Find/Restrict methods returned no results if the WHERE clause contained a condition specifying an empty string (e.g. Subject = '' ).
MAPITable.ExecSQL, RDOItems.Find/Restrict methods returned no results if the WHERE clause contained a condition specifying a named MAPI property in the DASL format in the "string" namespace (e.g. "http://schemas.microsoft.com/mapi/string/{00020329-0000-0000-C000-000000000046}/test") .
MAPITable.ExecSQL, RDOItems.Find/Restrict methods did not handle Currency (PT_CURRENCY) properties in the WHERE clause.
MAPITable.ExecSQL returned binary (PT_BINARY) properties as variant arrays for the properties specified in the DASL format and as strings (hex) for the OOM properties (e.g. EntryID). New version will always return binary properties as hex strings.
MAPITable.ExecSQL truncated large string properties at 255 characters even if the underlying store provider returned more data. Note that this version will still be subject to the property truncation if the truncation is performed by the store provider (such as Exchange store).
Specifying binary properties (PT_BINARY, e.g. EntryID or ConversationIndex) properties in the WHERE clause in the MAPITable.ExecSQL, RDOItems.Find/Restrict methods did not return any results.
RDORecurrencePattern.DayOfWeekMask property did not work for the daily (RecurrenceType = olRecursDaily) recurrences patterns (every day vs every work day daily patterns).
Setting the RDORecurrencePattern.StartTime property sometimes resulted in Outlook displaying the first occurrence on a wrong date.
RDORecurrencePattern.DayOfMonth did not work correctly for some yearly (RecurrenceType = olRecursYearly) recurrences patterns.
RDOFolder2.GetActivitiesForTimeRange() and RDORecurrencePattern.GetOccurence failed for some yearly recurring appointments with DayOfMonth = 29, 30, 31.
Dev version under Vista (but not the distributable version) displayed the End User License Agreement (EULA) dialog every time Redemption was loaded. Note that the distributable version was not affected since it never displays any dialogs.
Setting the RDOMail.HTMLBody property (as well as calling RDOMail.Reply/ReplyAll/Forward) resulted in a corrupted message body if the HTML data contained certain <STYLE> tags.
Calling RDOMail.Delete for a message created on top of an MSG file sometimes resulted in an error.
Saving messages in the HTML format (SaveAs(..., olHTML)) did not encode the "<" and ">" characters in the message header (To/CC/Subject) and body (for the plain text messages).
RDOMail.CopyTo/Move raised an RPC_E_FAULT error if RDOSession.MAPIOBJECT was set (rather than RDOSession.Logon/LogonExchangeMailbox called) and the calling code was running in a process space other than outlook.exe (i.e. it is not a COM add-in or Outlook VBA code).
ProfMan.dll can now be installed on Vista even when User Access Control (UAC) is enabled and/or the current user does not have write access to the HKLM registry hive.
06/17/2007
Version 4.4.0.674
New features
Added RDOJournalItem object (corresponds to the JournalItem object in the Outlook Object Model).
Added
RDOItems.Find/FindNext/Restrict
methods that allow to find items using a standard SQL style string.
Specifying a SELECT clause allows Redemption to pre-fetch specified
properties directly from the folder contents table without opening the MAPI
messages later resulting in a significant performance gain.
|
set Session = CreateObject("Redemption.RDOSession") 'access properties specified in the SELECT clause above
'accessing other properties will force Redemption
to open the corresponding MAPI object, try to avoid that if possible |
Added RDOItems.Sort method.
Added
MAPITable.ExecSQL method that allows to specify the properties to
retrieve, restriction conditions and the sort order as a standard SQL string
with the property names either in the DASL or OOM format. The method returns
an instance of the standard ADODB.Recordset object
populated with data:
|
set Session =
CreateObject("Redemption.RDOSession") |
Added RDOFolderSearchCriteria.AsSQL property that allows to set and retrieve the search criteria as a SQL string.
MAPITable.Columns can now also be set to a variant array containing DASL or OOM property names (string, such as "urn:schemas:httpmail:subject" or "Subject") or a comma separated string (e.g. "Subject, SenderName") rather than a variant array of integer property tags (see example below). Note that it still always returns a variant array of integer tags.
MAPITable.Sort method now allows to pass the columns as a comma separated string (e.g. "Subject, SenderName") rather than as a variant array of integer property tags - see example below.
Added RDOFolder2.GetActivitiesForTimeRange method that allows to retrieve a sorted list of activities in a given time range with the instances of recurring appointments appropriately expanded:
|
set Session =
CreateObject("Redemption.RDOSession") |
The performance of the
RDOItems collection was significantly
increased if the collection's columns are preset by setting the RDOItems.MAPITable.Columns
property and only
properties specified in the columns property are retrieved from the returned items:
|
set Session =
CreateObject("Redemption.RDOSession") 'let Redemption know which
properties we will be requesting later 'read the
properties specified in the MAPITable.Columns property above |
Added RDOAttachment.FileSize and Attachment.FileSize properties. Unlike the Size property (which includes the binary data plus the attachment properties, such as filename etc), FileSize returns the size of the file data only.
Added RDORule.StopProcessingOtherRules property.
Added RDORecipient.SendRichInfo and Recipient.SendRichInfo properties
Added RDOAttachment.CreationTime / LastModificationTime and Attachment.CreationTime / LastModificationTime properties.
Implemented RDORecurrencePattern.GetOccurence method and RDORecurrencePattern.Exceptions collection for the RDOAppointmentItem object (see RDOExceptions and RDOException for more help).
Added RDOExchangeMailboxStore.GetFolderFromSourceKey and RDOExchangeMailboxStore.GetMessageFromSourceKey methods that allow to open messages and folders by the value of their PR_SOURCE_KEY property rather than the entry id.
Added MAPIUtils.ScCreateConversationIndex method - corresponds to the ScCreateConversationIndex function in MAPI or to Session.CreateConversationIndex in CDO 1.21.
Added RDOExchangeMailboxStore.CalendarOptions object that allows to access auto accept settings, free/busy data as a collection of discrete slots, etc. See RDOCalendarOptions object help for more details.
Added RDOAddressEntry.FreeBusyList that allows to access free/busy data for an Exchange user as a collection of discrete slots the way the data is stored by MAPI.
Added RDOFolder2.EmptyFolder method that allows to delete all messages and subfolders in a single call.
Added RDOSession.ExchangeConnectionMode / ExchangeMailboxServerName / ExchangeMailboxServerVersion / OutlookVersion properties.
Added RDORule.ConditionsAsSQL property.
Bug fixes:
Appointment updates sent by Redemption (RDOAppointmentItem.Send and SafeApointmentItem.Send) sometimes failed to correctly update the attendee's appointment.
RDOTaskItem.Send returned "Error in HrQueryAllRows(MAPI_TO only)" when called under online Exchange store.
Call to RDOAppointmentItem.GetRecurrencePattern took a long time to complete for appointments with a large number of exceptions.
RDOMail.ReplyRecipients.Add/AddEx returned null.
Redemption.dll failed to register on Windows Vista with UAC (User Access Control) turned on.
Redemption Type Library specified IRDOMeetingItem was derived from IDispatch rather than IRDOMail.
ProfSect.Item in the ProfMan library failed to retrieve some Unicode properties.
Setting RDORecipient.Name property resulted in the MAPI_E_INVALID_PARAMETER error under certain circumstances.
Setting RDOMail.HTMLBody property resulted in garbled HTML body under Outlook 2007 / Exchange 2003 in the online mode for the HTML data with embedded HTML comments.
ProfMan library did not handle PT_MV_STRING8 and PT_MV_UNICODE properties in the ProfSect.Item(PropTag) method.
RDOAddressEntry.Delete failed with "This feature is not implemented yet" error.
RDOSession.NewMail event did not fire for the sessions instantiated by calling RDOSession.LogonExchangeMailbox. Note that this event still won't fire for applications running as a service (this is a MAPI limitation).
RDORecipients.Add/AddEx and SafeRecipients.Add/AddEx did not handle Unicode names correctly.
Modifying any of the RDOAttachment properties required an explicit call to RDOAttachment.Save followed by a call to RDOMail.Save. Now the attachment data is automatically saved when the parent message is saved (RDOMail.Save). If a modified attachment is released before the parent message is saved, the attachment (but not the message) is saved automatically, so that when RDOMail.Save is called, the changes will be persisted.
RDOSession.GetAddressEntryFromID and RDOSession.GetAddressListFromID returned invalid objects under certain circumstances.
RDOMail.Reply/ReplyAll/Forward methods did not set PR_LAST_VERB_EXECUTED, PR_LAST_VERB_EXECUTION_TIME, PR_ICON_INDEX MAPI properties on the original message.
RDOSession.GetMessageFromMsgFile(..., TRUE) will now create MSG files in the Unicode (olMsgUnicode) format if Outlook 2003 or higher is installed.
RDOItems.ItemAdd / ItemChange events sometimes passed RDOMail object to the event handler even if a different object (but derived from RDOMail, such as RDOContactItem, RDOAppointmentItem, etc) should have been passed based on the value of the message class.
Setting RDOAppointmentItem.AllDayEvent property to false reset the Start property to 9:00 am and the Duration property to 30 minutes.
RDOAttachments.Item and Attachments.Item only allowed an integer index (1 through Count) as a parameter, but not an attachment file name.
Setting RDOContactItem.Email1EntryID property did not update the EmailOriginalDisplayName MAPI property.
RDOAppointmentItem - setting the Start and End properties (but not Duration) always created an appointment with the duration of 30 minutes and ignored changes to either Start or End properties (depending on the order in which the properties were set).
Calling RDOMail.Move was slow if the target folder had a large number of messages. If the returned value (the newly created RDOMail object) of the Move method is ignored, the method will be executed an order of magnitude faster. It can however take a considerable amount of time when any property or method on the returned message is accessed for the every first time as Redemption needs to find the new message in the target folder.
RDOFolder2.SetAsDefaultFolder method did not set PR_CONTAINER_CLASS property appropriately for the olFolderCalendar, olFolderContacts, olFolderJournal, olFolderNotes, olFolderTasks and olFolderDrafts folders.
Text file created by calling RDOMail / Safe*Item.SaveAs(..., olTxt) listed hidden attachments (such as embedded HTML images). RDOAttachment.Hidden property now also checks whether it is referenced by the HTML body as an embedded image.
01/07/2007
Version 4.3.0.604
New features
Added RDOAppointmentItem object (corresponds to the AppointmentItem object in the Outlook Object Model) and RDOMeetingItem (corresponds to the MeetingItem object in the Outlook Object Model)
Added RDOSession.Profiles collection that allows to enumerate existing profiles for the current Windows user and retrieve or set the default profile name. See RDOProfiles help for more information.
Added RDOSession.TimeZones collection (similar to the Application.TimeZones collection in the Outlook 2007 Object Model). Dynamic DST is fully supported. See RDOTimezones, RDOTimezone, RDOAppointmentItem.StartTimeZone and RDOAppointmentItem.EndTimeZone help for more information.
Added RDOExchangeMailboxStore.Rules collection. Note that this collection creates rules that are not displayed by the "Rules And Alerts" dialog in Outlook and is only available for the Exchange mailboxes. See RDORules for more information.
Added RDOFolder2.DeletedFolders collection (Exchange only) that allows to enumerate and restore deleted (but recoverable) subfolders. See RDODeletedFolders help for more information.
Added RDOMail.Actions collection representing all the available actions for the item (corresponds to the MailItem.Actions collection in the Outlook Object Model). Since all other items (RDOContactItem, RDOTaskItem, etc) are derived from RDOMail, they will expose this property as well. See RDOActions help for more information.
Added RDOMail.VotingOptions property (corresponds to the MailItem.VotingOptions property in the Outlook Object Model).
Added RDOMail.MarkRead method which allows (unlike the RDOMail.UnRead property) to bypass sending a read receipt (if one is requested).
Added RDOMail.Conflicts collection that represents the items that are in conflict with the item. Since all other items (RDOContactItem, RDOTaskItem, etc) are derived from RDOMail, they will expose this collection as well. See RDOConflicts, RDOConflict and RDOMail.Conflicts for more information.
Added SafeAppointmentItem.SendAsICal property - determines whether the meeting requests/updates for the appointment will be sent in the iCal or TNEF format. The same property is also exposed by the new RDOAppointmentItem object.
Added olRtfNoHeaders (1026) enum for the SaveAs method. This enum forces Redemption to save the message in the RTF format but without the headers (To/CC/Subject/etc).
Added RDOSession.SetLocaleIDs method (similar to Session.SetLocaleIDs in CDO 1.21).
Added RDOFolder2.FindPFFavoritesCopy method that returns the folder's counterpart added to the PF Favorites.
Bug fixes:
RDOSession.GetMessageFromMsgFile and RDOAttachment.EmbeddedMsg always returned a generic RDOMail object even if the message class corresponded to RDOContactItem, RDOTaskItem, etc object (all derived from RDOMail).
ProfMan: removing a property by setting it to Nothing using ProfileSection.Item(PropTag) returned an error.
RDOMail/Safe*Item.Send did not set the appropriate tracking property (PR_REPORT_TAG) when a read receipt was requested (ReadReceiptRequested = true).
RDOAddressBook.ResolveName did not handle Unicode names correctly.
MessageItem.SentOn property was returned in the UTC timezone.
RDODistListItem.AddContact method returned "Could not retrieve address or fax number" error if the specified contact resided in a message store different from the Distribution List's parent store.
Setting the RDOMail.FlagDueBy property did not set all the reminder and flag related MAPI properties the way MailItem.FlagDueBy property in the Outlook Object Model does.
Calling RDOStores.AddPSTStore(..., olStoreDefault) on a machine with Exchange Server raised MAPI_E_NOT_FOUND error.
RDOMail/Safe*Item.SaveAs(..., olRtf) - saving in the RTF format omitted the message headers (To/From//Subject/etc).
RDOSession.GetMessageFromMsgFile and MAPIUtils.GetItemFromMsgFile did not handle Unicode file names correctly.
RDOSession.GetMessageFromMsgFile and MAPIUtils.GetItemFromMsgFile returned STG_E_ACCESSDENIED error for the MSG files marked as read-only.
Setting RDOMail/MessageItem.HTMLBody property to a Unicode string resulted in a corrupted HTML body if the current code page was different from the code page used in the HTML data.
SafeMailItem.Send under Outlook 2007 did not move the message to the Sent Items folder. Note that RDOMail.Send was not affected.
RDOAttachment.SaveAsFile and Attachment.SaveAsFile were raising an error if given a true Unicode file name.
Several Redemption methods (RDOSession.GetMessageFromMsgFile, MAPIUtils.GetItemFromMsgFile, Attachments.Add, RDOMail/Safe*Item.Import, RDOContactItem.AddPicture, etc) raised an error reporting that the file does not exist if the file's last modified date was greater than year 2108.
Safe*Item.Recipients collection did not properly return Unicode properties under certain conditions. Note that RDOMail.Recipients was not affected.
RDOSession.GetFolderFromPath and RDOStores.Item (if name was passed as a parameter) sometimes failed for the PF store folders.
RDOContactItem.AddPicture/RemovePicture did not work if the contact never had a picture before.
RDODistListItem.AddContact failed when a distribution list (e.g. RDODistListItem or Outlook.DistListItem) was passed as a parameter.
Accessing RDOAttachment.EmbeddedMsg property for an RDOMail object created on top of an MSG file caused the MSG file to remain locked.
Redemption.dll failed to successfully install itself in a multi user environment (such as Citrix) if the Windows user registering the dll had r/w access to the HKLM and HKCR registry hives, but the dll was previously installed by another user creating registry keys that the second user could not overwrite.
RDOFolders.Item and RDOSession.GetFolderFromPath methods failed if a Unicode folder name was passed as an argument even if the parent store natively supported Unicode.
RDOStores.FindExchangePublicFoldersStore and RDOStores.GetDefaultFolder(olPublicFoldersAllPublicFolders / olPublicFoldersFavorites) failed under Outlook 2007 if the primary mailbox store has never been opened in the current MAPI session.
MessageItem.LastModificationTime property returned the value in the UTC timezone, not local.
RDOStores.AddDelegateExchangeMailBoxStore was returning NULL instead of the added delegate mailbox store (RDOExchangeMailboxStore).
RDOStores.AddPstStore, RDOStores.AddPstStoreWithPassword and RDOPstStore.PstPath did not handle Unicode file names correctly.
RDOTaskItem.GetRecurrencePattern hanged on certain recurrence patterns.
RDOPstStore.Remove failed for the IMAP4 provider stores.
RDOAttachment.SaveAsFile and
Attachment.SaveAsFile for certain corrupted attachments failed to
save the attachment data, but did not raise the appropriate error.
08/23/2006
Version 4.2.0.562
New features
Added RDOTaskItem object (corresponds to the TaskItem object in the Outlook Object Model).
Added RDOTaskRequestItem object (corresponds to the TaskRequestAcceptItem, TaskRequestDeclineItem, TaskRequestUpdateItem and TaskRequestItem objects in the Outlook Object Model).
Added RDONoteItem object (corresponds to the NoteItem object in the Outlook Object Model).
Added RDOPostItem object (corresponds to the PostItem object in the Outlook Object Model).
Added RDOReportItem object (corresponds to the ReportItem object in the Outlook Object Model).
added RDOAddressBook.CreateOneOffEntryID method. This method allows to create a one-off an address book entry id given an e-mail address, display name and address type. It also allows to explicitly specify whether a message to a given address must be sent in the RTF or plain text format (see example).
added RDOMail.Links collection. Since RDOContactItem, RDOTaskItem, RDODistListItem, RDOReportItem, RDONoteItem and RDOPostItem objects are derived from RDOMail, this change makes the new Links collection available to them too.
added RDOStores.AddPstStoreWithPassword method that allow to open password protected PST stores.
by popular demand - added AddressEntry.SMTPAddress property (returned by the Safe*Item objects). Note that RDOAddressEntry object already had the SMTPAddress property.
added GetFirst, GetLast, GetNext, GetPrevious methods to the RDOACL, RDOAttachments and RDORecipients collections. Note that these methods were already implemented for the RDOItems, RDOFolders, RDOAddressLists and RDOAddressEntries collections.
added RDOContactItem.FileUnderId property.
added RDOExchangeMailboxStore.IsCached and OstPath properties.
added RDOExchangePublicFoldersStore.IsCached property.
added RDOFolder2.FolderPath and RDOSearchFolder.FolderPath properties (return full path to a given folder). The path can be used to call RDOSession.GetFolderFromPath.
added RDOFolder2.AddToPFFavorites and RDOFolder2.RemoveFromPFFavorites methods and the RDOFolder2.IsInPFFavorites property.
added skBCM (corresponding to the Business Contact Manager store provider) enum to the TxStoreKind enumeration (returned by the RDOStore.Kind property).
added RDOStoreEvents.OnMessageMovedEx, RDOStoreEvents.OnFolderMovedEx, RDOFolderEvents.OnMovedEx, RDOMailEvents.OnMovedEx event - these "Ex" events provide two additional parameters - OldParentEntryID and NewParentEntryId, corresponding to the entry ids of the old and new parent folders
added RDOFolder2.FolderFields collection that allows to access and modify custom user fields in a folder. Corresponds to "User-defined fields in this folder" in the Field Chooser in Outlook.
added RDOAddressEntry.GetContact method (returns RDOContactItem object).
added RDOAddressList.GetContactsFolder method.
New values for the rdoDefaultFolders enumeration (used in the GetDefaultFolder methods): olPublicFoldersFavorites (all versions of Outlook) and olFolderRssSubscriptions, olFolderToDo and olFolderManagedEmail (Outlook 2007 specific).
Prior to this version, accessing object properties (PT_OBJECT) using Fields() (e.g. Safe*Item.Fields, RDOFolder.Fields) returned SafeTable object for the MAPI properties that could be opened as an IMAPITable object (e.g. PR_CONTAINER_CONTENTS, PR_ACL_TABLE, etc). Starting with this version, MAPITable object is returned. Note that the old SafeTable object exposed only one property - Count, while MAPITable provides a much richer interface, including search and restrictions.
Bug fixes:
RDOAddressEnry.SMTPAddress property did not return the SMTP address for the Outlook Address Book (OAB) entries pointing to a GAL user (accessing GAL entries worked fine).
RDOMail.Display(TRUE) was ignoring the MAPI_E_USER_CANCEL return code when user closed a modally displayed message without sending it. If your code uses RDOMail.Display to display a message modally, make sure your code can handle the error, which is normal and should not be treated as an error, but rather as an indication how the message window was closed.
RDOSession.Logon in a Windows service failed with MAPI_E_INVALID_PARAMETER. Note that RDOSession.LogonExchangeMailbox was not affected.
RDOSession.GetDefaultFolder and RDOStore.GetDefaultFolder specified wrong argument type for the FolderType parameter: it must be one of the rdoDefaultFolders enums.
Setting RDOMail.Categories, Companies and Children properties to an empty string ("") resulted in the MAPI_E_INVALID_PARAMETER error.
accessing any properties of a message returned by RDOMail.Move caused a MAPI_E_NOT_FOUND error to be returned.
copying or moving messages (RDOMail.CopyTo and RDOMail.Move) between different PST stores did not preserve created/last modified properties.
importing MSG files (RDOMail.Import and Safe*Item.Import) did not handle recipients with the Unicode display names.
RDOStore.OnSearchComplete and RDOFolder.OnSearchComplete events were not firing.
calling RDOStore.DefaultStore, GetDefaultFolder and FindExchangePublicFoldersStore methods restricted the number of available stores in that instance of the RDOStores collection to one.
setting the RDOContactItem.FileAs property was not being reflected in the Outlook UI or the Outlook Object Model. Setting either of the name properties (first or last name, suffix, etc) caused the FileAs property to be reset even if it was explicitly set previously.
RDOFolder.CopyTo could not copy across different message stores.
RDORecipients.Remove would silently fail under certain circumstances.
Distribution lists created by Redemption (RDODistListItem) did not have a display name in Outlook Web Access (OWA).
RDOMail.ReplyRecipients.AddEx returned an invalid variant conversion error.
RDOSession.GetSharedMailbox and RDOStores.GetSharedMailbox failed if a store other than an Exchange mailbox was set as the default store in the profile.
Attachment.Type and RDOAttachment.Type properties sometimes returned a value other than olByReference (4) for the by-reference attachments.
Attachment.SaveAsFile and RDOAttachment.SaveAsFile methods failed to save by-reference attachments.
RDODistListItem could not remove all the members of the distribution list.
Safe*Item/RDOMail.SaveAs(..., olRFC822) silently failed on Windows 95/98/ME.
Calling RDOMail or Safe*Item SaveAs(..., olMsg) sometimes failed to save the message body in the MSG file.
02/27/2006
Version 4.1.0.507
10/30/2005
Version 4.0.0.452
02/07/2005
Version 3.4.0.402
04/20/2004
Version 3.4.0.325
11/17/2003
Version 3.3.0.282
The primary goal of this intermediate release was stability under every supported version of Outlook (98 through 2003) in every possible configuration, language pack or service pack whether Redemption is used in a COM add-in or a in separate exe. There were dozens of bugs fixed ranging from access violations to inconsistent behavior.
The only three new features are:
08/15/2003
Version 3.3.0.252
03/12/2003
Version 3.2.0.221
12/25/2002
Version 3.1.0.182
11/02/2002
Version 3.0.0.152
07/01/2002
Version 2.0.0.536
03/29/2002
Version 1.1.0.471.03/19/2002
Version 1.1.0.467.03/18/2002
Version 1.1.0.465.03/13/2002
Version 1.1.0.461.02/21/2002
Version 1.1.0.443.02/05/2002
Version 1.1.0.423.01/31/2002
Version 1.1.0.404.11/20/2001
Version 1.1.0.382.