| 
			 
    	    |   RDOStore object represents a generic 
message store. Depending on the actual kind of the store (see StoreKind property 
below), the following methods will return store objects with extra properties 
and methods. E.g. RDOPstStore implements all the properties and methods of the 
RDOStore object plus implements an extra property specific to a PST store - 
PstPath.    See 
RDOPstStore, 
RDOStore2, 
RDOExchangeStore, RDOExchangeMailboxStore,
RDOExchangePublicFoldersStore, 
RDOEASStore objects below.   Returned by:  RDOStores:
Item, AddPSTStore, AddDelegateExchangeMailBoxStore, 
FindExchangePublicFoldersStore, GetSharedMailbox, GetStoreFromID  RDOSession.GetStoreFromID
 RDOFolder.Store RDOMail.Store 
RDOIMAPAccount.Store 
RDOHTTPAccount.Store     The example below logs to the default 
MAPI session and prints out the file names of the PST stores and Server 
Distinguished Name for the Exchange stores 
  
    | 
	set Session = 
	CreateObject("Redemption.RDOSession")Session.Logon
 for each Store in Session.Stores
 if (Store.StoreKind = skPstAnsi) or (Store.StoreKind = skPstUnicode) Then
 Debug.Print Store.Name & " - " & Store.PstPath
 ElseIf (Store.StoreKind = skPrimaryExchangeMailbox) or (Store.StoreKind = 
	skDelegateExchangeMailbox) or (Store.StoreKind = skPublicFolders) Then
 Debug.Print Store.Name & " - " & Store.ServerDN
 End If
 next
 |    Properties Methods Events   
	
		| 
 |  
		|  |  
		| 
 |  
		| _MAPIProp methods and 
		properties: 
		GetIDsFromNames, Fields(), GetPropList, GetNamesFromIDs, CopyTo, Save, 
		MAPIOBJECT, Session  |  
		| 
 |  
		| 
		Properties |  
		| 
 |  
		| StoreKind | Returns an enumeration 
		representing the message store kind StoreKind - TxStoreKind:  skUnknown = 0;skPstAnsi = 1;
 skPstUnicode = 2;
 skPrimaryExchangeMailbox = 3;
 skDelegateExchangeMailbox = 4;
 skPublicFolders = 5
 skBCM = 6 
		skIMAP4 = 7 skHotmail = 8 
		skEAS = 9   | set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 NumPstStores = 0for each Store in Session.Stores
 if (Store.StoreKind = skPstAnsi) or (Store.StoreKind = skPstUnicode) Then
 NumPstStores = NumPstStores + 1
 next
 MsgBox "You have " & 
		NumPstStores & " PST stores in the profile" |  
		| Default | boolean, read-write. Returns 
		true if the store is default in the given profile. Set to true to make 
		the store default | set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 Set Store = Session.Stores("Test PST Folders")
 Store.Default = true
 |  
		| RootFolder | Returns
		RDOFolder object representing the root 
		folder of the message store. Note that this folder is not visible to a 
		user |   |  
		| IPMRootFolder | Returns
		RDOFolder object representing the top 
		visible folder of the message store.  | set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 Set Store = Session.Stores("Personal Folders")
 set RootFolder = Store.IPMRootFolder
 Debug.Print "Top Level folders in " & Store.Name & ":"
 for each Folder in RootFolder.Folders
 Debug.Print Folder.Name
 next
 |  
		| SearchRootFolder | Returns
		RDOFolder object representing the top search 
		folder of the message store.  |   |  
		| EntryID | string, read-only. Returns 
		the entry id of the store |   |  
		| Name | string, read-write. 
		Reads/sets the name of the store. | set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 set Store = Session.DefaultStore
 MsgBox Store.Name |  
		| 
		Reminders  | Returns 
		RDOReminders object representing the reminders collection for a 
		given store. | 'snooze all active 
		reminders for 2 minutesset Session = CreateObject("Redemption.RDOSession")
 Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Store = Session.Stores.DefaultStore
 set Reminders = Store.Reminders
 for each Reminder in Reminders
 if Reminder.IsVisible Then
 Reminder.Snooze(2) 'snooze for 2 minutes
 End If
 next
 |  
		| StoreAccount | returns
		RDOAccount object corresponding to the 
		Outlook account associated with the store. Read-only. Outlook 2002 and up only. | set Session = 
		CreateObject("Redemption.RDOSession")Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 for each Store in Session.Stores
 set Account = Store.StoreAccount
 if not (Account Is Nothing) Then
 Debug.Print "Store """ & Store.Name & """ is associated to 
		account """ & Account.Name & """. (type """ & Account.AccountTypeStr & 
		""")"
 End If
 next
 |  
		| 
 |  
		| 
		Methods |  
		| 
 |  
		| GetDefaultFolder(FolderType) | FolderType - integer. 
		The type of default folder to return. Accepts the same values as 
		Namespace.GetDefaultFolder method in Outlook Object Model 
		(olFolderInbox, olFolderContacts, etc). 
		 Returns
		RDOFolder object. 
		Note that unlike RDOSession.GetDefaultFolder or 
		RDOStores.GetDefaultFolder , which return default folders from the default 
		store, this method returns the default folder from a given store, which 
		does not have to be the default store. 
		E.g. if you open a delegate Exchange mailbox, this method will return 
		the default folder of the mailbox owner. This also applies to multiple 
		PST stores, if they have the default folder structure set up. 
		  | set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 set Inbox = Session.DefaultStore.GetDefaultFolder(olFolderInbox)
 for each Msg in Inbox.Items
 Debug.Print(Msg.Subject)
 next
 |  
		| AbortSubmit(MessageEntryID) | Aborts message submission for 
		a given message. MessageEntryID - 
		string. The entry id of a message marked for submission. |   |  
		| CompareEntryIDs(EntryID1, 
		EntryID2) | Checks whether the two entry 
		ids refer to the same MAPI object. Note that entry ids cannot be 
		directly compared and multiple entry ids can refer to the same object 
		(e.g. in case of long term vs. short term entry id). EntryID1 - string, entry id 
		of the first object EntryID2 - string, entry id 
		of the second object |   |  
		| GetMessageFromID(EntryIDMessage, 
		Flags) | EntryIDMessage - 
		string representing the entry id of the message 
		Flags - (optional). integer flags to be used to call 
		IMAPISession::OpenEntry. By default MAPI_BEST_ACCESS (0x10) is used. 
		This parameter is most useful if you need to bypass the cached mode in 
		Outlook 2003. E.g. passing MAPI_NO_CACHE (0x200) +  
		MAPI_BEST_ACCESS (0x10) will open the message in the best access mode 
		bypassing the cached store. 
		Returns RDOMail object. 
		  |   |  
		| GetFolderFromID(EntryIDFolder, 
		Flags) | EntryIDFolder - string 
		representing the entry id of the folder 
		Flags - (optional). integer flags to be used to call 
		IMAPISession::OpenEntry. By default MAPI_BEST_ACCESS (0x10) is used. 
		This parameter is most useful if you need to bypass the cached mode in 
		Outlook 2003. E.g. passing MAPI_NO_CACHE (0x200) +  
		MAPI_BEST_ACCESS (0x10) will open the folder in the best access mode 
		bypassing the cached store. 
		Returns RDOFolder object. 
		  |   |  
		| Remove | Removes the given store from 
		the profile. | set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 Set Store = Session.Stores("Test PST Folders")
 Store.Remove
 |  
		| 
	
		| 
 |  
		| Events: |  
		| 
 |  
		| OnNewMail(EntryID) | Fires when a new message is 
		delivered to the Inbox of the store. EntryID - string, 
		entry id (in hex) of the newly delivered message. Note that under 
		Exchange, the entry id is a short term entry id. To retrieve the long 
		term entry id, open the message (e.g. using 
		RDOSession.GetMessageFromID), then read the EntryID property from the 
		RDOMail 
		object. | Dim WithEvents Store As 
		Redemption.RDOStore...
 Set Session = New 
		Redemption.RDOSessionSession.Logon
 Set Store = 
		Session.Stores.DefaultStore ... Sub Store_OnNewMail(ByVal 
		EntryID As String)Dim Msg As Redemption.RDOMail
 Set Msg = Store.GetMessageFromID(EntryID)
 MsgBox "Store_OnNewMail: " & Msg.Subject
 End Sub
 
 |  
		| OnMessageCreated(EntryID) | Fires when a message is 
		created in the store. EntryID - string, 
		entry id (in hex) of the message. 
		   |   |  
		| OnMessageCreatedEx(EntryID, 
		ParentEntryID)   | Fires when a message is 
		created in the store. EntryID - string, 
		entry id (in hex) of the message. 
		ParentID - entry id of the parent folder   |   |  
		| OnFolderCreated(EntryID) | Fires when a folder is 
		created in the store. EntryID - string, 
		entry id (in hex) of the folder. 
		   |   |  
		| OnMessageCopied(EntryID) | Fires when a message is 
		copied in the store. EntryID - string, 
		entry id (in hex) of the message. 
		   |   |  
		| OnFolderCopied(EntryID) | Fires when a folder is copied 
		in the store. EntryID - string, 
		entry id (in hex) of the folder. 
		   |   |  
		| OnMessageDeleted(EntryID) | Fires when a message is 
		deleted in the store. EntryID - string, 
		entry id (in hex) of the message. 
		   |   |  
		| OnMessageDeletedEx(EntryID, 
		ParentEntryID)   | Fires when a message is 
		deleted in the store. EntryID - string, 
		entry id (in hex) of the message. 
		ParentID - entry id of the parent folder   |   |  
		| OnFolderDeleted(EntryID) | Fires when a folder is 
		deleted in the store. EntryID - string, 
		entry id (in hex) of the folder. 
		  |   |  
		| OnMessageModified(EntryID) | Fires when a message is 
		modified in the store. EntryID - string, 
		entry id (in hex) of the message. 
		   | Dim WithEvents Store As 
		Redemption.RDOStore...
 Set Session = New 
		Redemption.RDOSessionSession.Logon
 Set Store = 
		Session.Stores.DefaultStore ... Sub 
		Store_OnMessageModified(ByVal EntryID As String)Dim Msg As Redemption.RDOMail
 Set Msg = Store.GetMessageFromID(EntryID)
 MsgBox "Store_OnMessageModified: " & Msg.Subject
 End Sub
 
 |  
		| OnMessageModifiedEx(EntryID, 
		ParentEntryID) | Fires when a message is 
		modified in the store. EntryID - string, 
		entry id (in hex) of the message. 
		ParentID - entry id of the parent folder   |   |  
		| OnFolderModified(EntryID) | Fires when a folder is 
		modified in the store. EntryID - string, 
		entry id (in hex) of the folder. 
		  |   |  
		| OnMessageMoved(EntryID) | Fires when a message is moved 
		in the store. EntryID - string, 
		entry id (in hex) of the message. 
		   |   |  
		| OnMessageMovedEx(EntryID, 
		OldParentEntryID, NewParentEntryID) | Fires when a message is moved 
		in the store. EntryID - string, 
		entry id (in hex) of the message. 
		OldParentEntryID - string, entry id (in hex) of the old parent 
		folder. 
		NewParentEntryID - string, entry id (in hex) of the new parent 
		folder. 
		  | Dim WithEvents Store As 
		Redemption.RDOStore...
 Set Session = New 
		Redemption.RDOSessionSession.Logon
 Set Store = 
		Session.Stores.DefaultStore ... 
		Sub Store_OnMessageMovedEx(ByVal EntryID As String, ByVal 
		OldParentEntryID As String, ByVal NewParentEntryID As String)Dim Msg As Redemption.RDOMail
 Dim OldParent As Redemption.RDOFolder
 Dim NewParent As Redemption.RDOFolder
 Set Msg = Store.GetMessageFromID(EntryID)
 Set OldParent = Store.GetFolderFromID(OldParentEntryID)
 Set NewParent = Store.GetFolderFromID(NewParentEntryID)
 MsgBox "Store_OnMessageModifiedEx: " & Msg.Subject & _
 "; Old parent: " & OldParent.Name & _
                 
		"; New parent: " & NewParent.NameEnd Sub
 
 |  
		| OnMessageMoved3(EntryID, 
		OldParentEntryID, NewParentEntryID, OldEntryID) | Fires when a message is moved 
		in the store. EntryID - string, 
		entry id (in hex) of the message. 
		OldParentEntryID - string, entry id (in hex) of the old parent 
		folder. 
		NewParentEntryID - string, entry id (in hex) of the new parent 
		folder. 
		OldEntryID - string, old entry id (hex) of the 
		message. Note that PST provider always passes an empty old entry id, but 
		moving a folder or a message never changes its entry id, so the old 
		entry id is the same as the new one (EntryID parameter) 
		  |   |  
		| OnMessageMoved3 |  |  |  
		| OnFolderMoved(EntryID) | Fires when a folder is moved 
		in the store. EntryID - string, 
		entry id (in hex) of the folder. 
		  |   |  
		| OnFolderMovedEx(EntryID, 
		OldParentEntryID, NewParentEntryID) | Fires when a folder is moved 
		in the store. EntryID - string, 
		entry id (in hex) of the folder. 
		OldParentEntryID - string, entry id (in hex) of the old parent 
		folder. 
		NewParentEntryID - string, entry id (in hex) of the new parent 
		folder. 
		  |   |  
		| OnFolderMoved3(EntryID, 
		OldParentEntryID, NewParentEntryID, OldEntryID) | Fires when a message is moved 
		in the store. EntryID - string, 
		entry id (in hex) of the folder. 
		OldParentEntryID - string, entry id (in hex) of the old parent 
		folder. 
		NewParentEntryID - string, entry id (in hex) of the new parent 
		folder. 
		OldEntryID - string, old entry id (hex) of the 
		folder. Note that PST provider always passes an empty old entry id, but 
		moving a folder never changes its entry id, so the old entry id is the 
		same as the new one (EntryID parameter) 
		  |   |  
		| OnSearchComplete(EntryID) | Fires when an asynchronous 
		search in a search folder is complete EntryID - string, 
		entry id (in hex) of the search folder. 
		  |   |  |      
This object represents an extension 
of the RDOStore interface and introduces oadditional properties (see below). This interface can be used for any 
store (RDOExchangeStore, 
RDOExchangeMailboxStore,
RDOExchangePublicFoldersStore) 
	
		| 
 |  
		|  |  
		| 
 |  
		| implements all RDOStore 
		properties and methods |  
		| 
 |  
		| Properties |  
		| 
 |  
		| Categories   | returns 
RDOCategories collection representing categories from the given store  Only Outlook 2007 (or higher) 
		stores categories list in the default store.   | set Session = 
		CreateObject("Redemption.RDOSession")Session.logon
 set Store = Session.GetSharedMailbox("dmitry")
 set Categories = Store.Categories
 set Category = Categories.Add("Redemption Category", 
		olCategoryColorPeach)
   |  
		| DisplayOrder 
 | integer,, read/write. Returns or sets the store's order in the Outlook's folder 
pane. The first store has an index of 1 and the last store has an index of RDOSession.Stores.Count.
 
 
 | RDOPstStore store = session.Stores.AddPSTStore(@"c:\temp\important.pst", 
		Missing.Value, 
		"Most important store"); (store  as 
		RDOStore2).DisplayOrder = 2; 
		//second store - the 
		property is 1 based, not 0   |  
		| Favorites 
 | RDOFavorites, read-only. Returns the list of folders marked as favorites in the current store.
 
 |  |  
		| GetFolderFromPath(FolderPath, CanCreate) | Similar to the RDOSession.GetFolderFromPath 
method, but allows to open a folder by path on the per-store level. This method 
includes an optional parameter (CanCreate) that can be used to create 
the folders along the path if they do not already exist.. If the folder path includes the store name (prefixed with "\\"), it is ignored. 
This makes it possible to retrieve RDOFolder.FolderPath 
from a folder in one store and recreate the same path in another store.
 
 FolderPath - string, full folder path in the form "\\Store name\Parent 
Folder Name\Folder". If store name is not specified, the default store is 
assumed.
 
 CanCreare - variant, optional. If true, all folders on the path 
are created if necessary. Defaults to false if not specified.
 
 
 | RDOSessionsession =  
		new
		
		RDOSession(); session.Logon("Test");
		
		RDOStore store = 
		session.Stores.DefaultStore;
		
		RDOStore2 store2 = store 
		 
		as
		
		RDOStore2;
		
		RDOFolder folder = 
		store2.GetFolderFromPath(@"Inbox\Test 
		folder", 
		 
		true);
		
		MessageBox.Show(folder.Name); |  
		| Searches | 
		RDOSearches, read-only.   Returns
		RDOSearchescollection that provides access 
		to the Outlook Search Folders.   | set Session = 
		CreateObject("Redemption.RDOSession")Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Searches = Session.Stores.DefaultStore.Searches
 for each Search in Searches
 Debug.Print "-------------"
 Debug.Print Search.Name
 Debug.Print Search.SearchCriteria.AsSQL
 next
   |  
		| 
 |          
This object represents PST (either 
ANSI or Unicode) message store. Implements all RDOStore
properties and methods and exposes an additional 
property: PstPath. This object is returned by the various RDO methods if 
StoreKind property is either skPstAnsi or skPstUnicode. 
	
		| 
 |  
		|  |  
		| 
 |  
		| implements all RDOStore 
		properties and methods |  
		| 
 |  
		| Properties |  
		| 
 |  
		| PstPath | String. Returns a fully 
		qualified path to the given PST store 
		  
		Important note: if you set RDOSession.MAPIOBJECT 
		property to Namespace.MAPIOBJECT property from the Outlook Object Model 
		and your code is running outside of the outlook.exe address space (i.e. 
		it is not a COM add-in) this property will return an error due to a MAPI 
		bug. | 
		set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 for each Store in Session.Stores
 if (Store.StoreKind = skPstAnsi) or (Store.StoreKind = skPstUnicode) Then
 Debug.Print Store.PstPath
 next
 |  
		| 
 |  
		| 
		Methods |  
		| 
 |  
		|   |  
		| GetNicknames  | Returns
		RDONickNames collection representing 
		nicknames stored in the store.   |   |  
		| OverridePSTDisableGrow 
 | Allows to temporarily disable
PSTDisableGrow policy on the per-PST store basis. Note that 
		
		PSTDisableGrowAllowAuthenticodeOverrides registry value must be set 
		prior to calling OverridePSTDisableGrow 
		method since the parent registry key requires elevated rights even 
		though is is a child of HKEY_CURRENT_USER.
 
 | 
		
		set 
		Session = CreateObject("Redemption.RDOSession") 
		Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
		
		set 
		pstStore = session.GetStoreFromID(Application.ActiveExplorer.CurrentFolder.Store.StoreID) 
		
		pstStore.OverridePSTDisableGrow() |  
		| ValidateIPMTree  | Validates and creates (if 
		necessary) the following default folders in the PST store   Inbox Outbox Deleted Items Sent ItemsCalendar
 Contacts Drafts Journal Notes Tasks Junk E-mail Folder Views Common Views Search Root IPM Subtree   | set Session = CreateObject("Redemption.RDOSession") 'open or create a new PST 
		storeSession.LogonPstStore("c:\temp\test_default_folders.pst", 1, "Test 
		Default Folders Store")
 set Store = Session.Stores.DefaultStore
 Store.ValidateIPMTree
 'now create a new contact 
		in the default Contacts folder of the newly created PST store set Contact = 
		Store.GetDefaultFolder(olFolderContacts).Items.AddContact.Email1Address = "test_address@dimastr.com"
 Contact.FirstName = "Dmitry"
 Contact.LastName = "Streblechenko"
 Contact.Save
 |  
		| 
 |      
This object represents an Exchange 
message store. RDOExchangeMailboxStore 
and RDOExchangePublicFoldersStore 
are derived from this interface. Implements all RDOStore
properties and methods and exposes an additional 
property: ServerDN.  
	
		| 
 |  
		|  |  
		| 
 |  
		| implements all RDOStore 
		properties and methods |  
		| 
 |  
		| Properties |  
		| 
 |  
		| 
		ServerDN | String. Returns an Exchange 
		Server distinguished name | set Session = CreateObject("Redemption.RDOSession")Session.Logon
 for each Store in Session.Stores
 if (skPrimaryExchangeMailbox) or (Store.StoreKind = 
		skDelegateExchangeMailbox) or (Store.StoreKind = skPublicFolders) Then
 Debug.Print Store.ServerDN
 next
 |  
		| 
 |      
| 
	RDOExchangeMailboxStore object | 
 This object represents an Exchange 
Server mailbox message store. Implements all RDOExchangeStore
properties and methods and exposes an additional 
property: Owner. This object is returned by the various RDO methods if StoreKind 
property is either skPrimaryExchangeMailbox or skDelegateExchangeMailbox. 
	
		| 
 |  
		|  |  
		| 
 |  
		| implements all 
		RDOExchangeStore 
		properties and methods |  
		| 
 |  
		| Properties |  
		| 
 |  
		| AutoDiscoverUrl | String, read-only. Returns the url pointing to the location of the  
		autodiscover XML for the store. 
 |  |  
		| CalendarOptions | Returns
		RDOCalendarOptions object that 
		represents the calendaring options (auto-accept, free/busy data, etc). Read-only.   | set Session = CreateObject("Redemption.RDOSession")Session.Logon
 set CalendarOptions = Session.Stores.DefaultStore.CalendarOptions
 CalendarOptions.AutoAccept = true
   |  
		| DaysToKeepOffline 
 | Integer, read/write. Number of days to keep messages in the OST file. 
		Cached mode only, Outlook 2013 or newer. 
 |  |  
		| Delegates | Returns RDOMailboxDelegates 
		object) that allows to manage delegates for an Exchange store. This functionality can be accessed in Outlook through File | Info | 
		Account and Social Network Settings | Delegate Access).
 
 
 | 'enumerate delegates
skPrimaryExchangeMailbox = 3
skDelegateExchangeMailbox = 4
set Session = CreateObject("Redemption.RDOSession")
Session.MAPIOBJECT = Application.Session.MAPIOBJECT
'Delegates API uses EWS, so we need to provide credentials unless
'the currently logged user is the mailbox owner
Session.Credentials.Add "*.onmicrosoft.com", "user@company.demo", "MyPassword"
Session.Credentials.Add "*.outlook.com", "user@company.demo", "MyPassword"
set Store = Session.Stores.DefaultStore
if (Store.StoreKind <> skPrimaryExchangeMailbox) and (Store.StoreKind <> skDelegateExchangeMailbox) Then
    MsgBox "Delegates are only supported for the Exchange stores"
Else
    set Delegates = Store.Delegates
    for each Delegate in Delegates
        Debug.Print Delegate.User.Name
    next
End If |  
		| ExchangeManageStore | Returns RDOExchangeManageStore 
		object. 
 | skPrimaryExchangeMailbox = 3 set Session = CreateObject("Redemption.RDOSession")
 Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Store = Session.Stores.DefaultStore
 if (Store.StoreKind = skPrimaryExchangeMailbox) Then
 set XMS = Store.ExchangeManageStore
 set Table = XMS.GetMailboxTable("")
		
	'use the current store's server DN
 set Recordset = Table.ExecSQL("SELECT 
		""http://schemas.microsoft.com/mapi/proptag/0x3001001E"" AS 
		PR_DISPLAY_NAME, " & _
 " 
		""http://schemas.microsoft.com/mapi/proptag/0x3003001E"" AS 
		PR_EMAIL_ADDRESS from Table")
 while not Recordset.EOF
 Debug.Print(Recordset.Fields("PR_DISPLAY_NAME").Value 
		&  " - " & Recordset.Fields("PR_EMAIL_ADDRESS").Value)
 Recordset.MoveNext
 wend
 End If
 
 |  
		| IsArchive 
 | Boolean, read-only. Since both delegate and archive Exchange stores are represented by the RDOExchangeMailboxStore 
object and the StoreKind property returns  
skDelegateExchangeMailbox for both kinds of mailboxes, IsArchive 
property allows to distinguish between delegate mailboxes that belong to 
another user and an archive mailbox owned by the current user.
 
 | 
		'create new message, modify it without saving 
		set 
		 newMailItem = Application.CreateItem(0) 
		newMailItem.Recipients.Add("test@dimastr.com") 
		'access the newly created unsaved item using Redemption 
		set 
		 sItem = CreateObject("Redemption.SafeMailItem") 
		sItem.Item = newMailItem 
		
		'Redemption will not see the new recipient added above using 
		OOM 
		MsgBox 
		"# of recipients before Commit:" & vbCrLf & sItem.Recipients.Count 
		'after calling Commit, Redemption can see pending changes 
		'without saving the item 
		sItem.Commit 
		MsgBox 
		"# of recipients after Commit:" & vbCrLf & sItem.Recipients.Count 
		  |  
		| IsCached | Boolean. read/write. Outlook 
		2003 and up only. Returns true if the Exchange 
		mailbox is cached. Note that delegate mailboxes are never cached. Setting this property won't 
		take effect until the next time MAPI logs to the profile. Corresponds to the "Use 
		Cached Exchange Mode" checkbox in the Exchange provider properties 
		dialog.   |   |  
		| IsConsumerAccount | Boolean, read-only. Returns true for a free outlook.com mailbox, and false otherwise
 
 |  |  
		| JunkEmailOptions | Returns
		RDOJunkEmailOptions object 
		representing mailbox Junk E-mail options. Note that mailbox Junk E-mail 
		options can be different from the profile-wide options: mailbox Junk 
		E-mail options can be retrieved or set for a mailbox other than the 
		primary mailbox in the profile (see the example)   | 'make sure messages from a 
		client are never marked as spam 
		set Session = CreateObject("Redemption.RDOSession")Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Store = Session.Stores.GetSharedMailbox("OtherUser")
 set JunkOptions = Store.JunkEmailOptions
 JunkOptions.TrustedSenders.Add "@ReallyBigClient.com"
 JunkOptions.Save
 
		  |  
		| LastSyncTime 
 | DateTime, read-only. The returns the time of the last sync. May not be 
		present on all stores. 
 |  |  
		| MAPIHTTPAddressbookExternalUrl 
 | String, read-only. Returns the url pointing to the external address book 
		endpoint for the MAPI-over-HTTP protocol. 
 |  |  
		| MAPIHTTPAddressbookInternalUrl 
 | String, read-only. Returns the url pointing to the internal address book 
		endpoint for the MAPI-over-HTTP protocol. 
 |  |  
		| MAPIHTTPMailboxExternalUrl 
 | String, read-only. Returns the url pointing to the external store 
		endpoint for the MAPI-over-HTTP protocol. 
 |  |  
		| MAPIHTTPMailboxInternalUrl 
 | String, read-only. Returns the url pointing to the internal store 
		endpoint for the MAPI-over-HTTP protocol. 
 |  |  
		| MaxSubmitMessageSize 
 | Integer, read-only. Returns the maximum allowed size of the outgoing messages (in kilobytes)
 
 
 | skPrimaryExchangeMailbox = 3 skDelegateExchangeMailbox = 4
 set Session = CreateObject("Redemption.RDOSession")
 Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set NewMsg = Session.GetDefaultFolder(olFolderOutbox).Items.Add
 NewMsg.Subject = "testing size"
 NewMsg.To = "dmitry@dimastr.com"
 NewMsg.Save
 set Store = Session.Stores.DefaultStore
 Cancel = false
 if (Store.StoreKind = skPrimaryExchangeMailbox) or (Store.StoreKind = 
		skDelegateExchangeMailbox) Then
 if Newmsg.Size >= 1024 * Store.MaxSubmitMessageSize 
		Then
 MsgBox "The outgoing message size exceeds the maximum allowed 
		size for this mailbox"
 Cancel = true
 End If
 End If
 if Not Canxel then
 NewMsg.Send
 End If
 
 
 |  
		| MessageSize | Integer (64 bit), read-only. Returns the total size of all messages in 
		the mailbox (bytes). 
 
 |  |  
		| MonthsToKeepOffline 
 | Integer, read/write. Number of months to keep messages in the OST file. 
		Cached mode only, Outlook 2013 or newer. If 0, all messages are cached.
 
 |  |  
		| OstPath | String, read only.   Returns full path to the 
		local OST file used to cache the mailbox. 
		  |   |  
		| Owner | 
		AddressEntry. Returns an Address Book 
		object that represents the owner of the mailbox 
		  | set Session = 
		CreateObject("Redemption.RDOSession")Session.Logon
 for each Store in Session.Stores
 if (Store.StoreKind = skPrimaryExchangeMailbox) or (Store.StoreKind = 
		skDelegateExchangeMailbox) Then
 Debug.Print Store.Owner.Name
 next
   |  
		| 
		OutOfOfficeAssistant | Returns an 
		RDOOutOfOfficeAssistant 
		object that allows to set the Out-Of-Office state and reply text. 
		  | skPrimaryExchangeMailbox = 3skDelegateExchangeMailbox = 4
 set Session = CreateObject("Redemption.RDOSession")
 Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Store = Session.Stores.DefaultStore
 if (Store.StoreKind = skPrimaryExchangeMailbox) or (Store.StoreKind = 
		skDelegateExchangeMailbox) Then
 set OOFAsistant = Store.OutOfOfficeAssistant
 OOFAsistant.OutOfOffice = true
 OOFAsistant.OutOfOfficeText = "Sorry, I am out of office at the moment!"
 Else
 MsgBox "Out Of Office Assistant is only available for the Exchange 
		mailboxes"
 End If
 
		  |  
		| PrimaryStore 
 | Returns an instance 
of the
RDOExchangeMailboxStore 
object that represents the primary Exchange mailbox in the given Exchange 
account. E.g.. if an Exchange account has 4 stores (primary mailbox M1, 
delegate mailboxes D1 and D2, and a Public Folders store P1), PrimaryStore 
property for all these stores will return the primary mailbox M1. The property was introduced to avoid 
the need to access RDOStore.StoreAccount 
property.  RDOAccount object returned by
RDOStore.StoreAccount. wraps the
IOlkAccount MAPI object, which has thread affinity and can raise an 
exception if accessed on a secondary thread. To avoid the cross-thread access 
exceptions, one can, for example, use
RDOExchangeMailboxStore.PrimaryStore.Owner.SMTPAddress 
in place of RDOExchangeMailboxStore.StoreAccount.CurrentUser.SMTPAddress.   |  |  
		| QuotaReceive | Integer, read-only. Returns the mailbox size (in kilobytes) when no new 
		messages will be received. 
 |  |  
		| QuotaSend | Integer, read-only. Returns the mailbox size (in kilobytes) when no new 
		messages will be allowed to be sent. 
 
 |  |  
		| QuotaWarning | Integer, read-only. Returns the mailbox size (in kilobytes) when the 
		mailbox owner receives a warning when a new message is received or sent. 
 
 |  |  
		| 
		Rules | 
		RDORules, read-only. Returns a collection 
		representing rules defined for the given mailbox. 
		  | set Session = 
		CreateObject("Redemption.RDOSession")Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Rules = Session.Stores.DefaultStore.Rules 'will raise an error if 
		not an Exchange store
 for each Rule in Rules
 Debug.Print Rule.Name
 next
   |  
		| ServerName 
 | String, read only. Returns the network name of 
		the server that hosts the mailbox. 
		  |  |  
		| ServerVersion 
 | String, read only. Returns the version of the 
		server that hosts the mailbox, e. g. "14.1.289.4001". 
		  |  |  
		| Templates 
 | Returns
RDOTemplates collection representing templates in 
		the mailbox. 
 |  |  
		| 
 |  
		| Methods |  
		| 
 |  
		| GetFolderFromSourceKey(SourceKey) | Returns a folder (RDOFolder) 
		object corresponding to the given source key (PR_SOURCE_KEY). SourceKey - the value 
		of the PR_SOURCE_KEY. Either a variant array of bytes as returned by
		RDOFolder.Fields() or a string with a hex 
		representation of  PR_SOURCE_KEY.   Normally folders can be 
		reopened using RDOSession.GetFolderFromID 
		or RDOStore.GetFolderFromID, but under 
		Exchange the values of entry ids can differ depending on how the object 
		is opened (e.g. whether it comes from the primary Exchange mailbox or a 
		delegate mailbox, etc). The value of  
		PR_SOURCE_KEY for a given folder or message is always the same. 
		GetFolderFromSourceKey and GetMessageFromSourceKey allow to 
		retrieve folders and messages when, for example, the folder or a message 
		is retrieved by one user, stored in an external DB and then ubsequently 
		retrieved in another user's context.   This method only works in the 
		online mode: the profile used in RDOSession.Logon 
		must either be configured to be in the online mode or
		RDOSession.LogonExchangeMailbox must 
		be used.    | PR_SOURCE_KEY = &H65E00102skPrimaryExchangeMailbox = 3
 skDelegateExchangeMailbox = 4
 skPublicFolders = 5'retrieve the values of source keys for a message and its parent 
		folder
 set Session = CreateObject("Redemption.RDOSession")
 Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Msg = 
		Session.GetMessageFromID(Application.ActiveExplorer.Selection.Item(1).EntryID)
 MessageSourceKey = Msg.Fields(PR_SOURCE_KEY)
 FolderSourceKey = Msg.Parent.Fields(PR_SOURCE_KEY)
 
 'convert the source keys to hex strings suitable for storage
 'in a database.
 'GetMessageFromSourceKey and GetFolderFromSourceKey can take either a 
		variant
 'array of bytes as returned by Fields() for the PT_BINARY properties or 
		a hex string, so it works either way
 set Utils = CreateObject("Redemption.MAPIUtils")
 strMessageSourceKey = Utils.HrArrayToString(MessageSourceKey)
 strFolderSourceKey = Utils.HrArrayToString(FolderSourceKey)
 
 'we can (now or later) use the values of the source keys to reopen a 
		messsage or a folder
 set Store = Session.Stores.DefaultStore
 if (Store.StoreKind = skPrimaryExchangeMailbox) or (Store.StoreKind = 
		skDelegateExchangeMailbox) or (Store.StoreKind = skPublicFolders) Then
 set NewMsg = Store.GetMessageFromSourceKey(strFolderSourceKey, 
		strMessageSourceKey)
 MsgBox "Message subject: " & NewMsg.Subject
 set NewFolder = Store.GetFolderFromSourceKey(strFolderSourceKey)
 MsgBox "Folder name: " & NewFolder.Name
 End If
 
   |  
		| GetMessageFromSourceKey(FolderSourceKey,
		MessageSourceKey) | Returns a message (RDOMail,
		RDOContactItem, etc depending on the 
		message class) object corresponding to the given source key 
		(PR_SOURCE_KEY). FolderSourceKey - the 
		value of the parent folder's PR_SOURCE_KEY property. Either a variant 
		array of bytes as returned by RDOFolder.Fields() 
		or a string with a hex representation of  PR_SOURCE_KEY.   MessageSourceKey - the 
		value of the message PR_SOURCE_KEY property. Either a variant array of 
		bytes as returned by RDOFolder.Fields() or a 
		string with a hex representation of  PR_SOURCE_KEY.   See GetFolderFromSourceKey 
		above.   |  |  
		| GetNicknames | Returns
		RDONickNames collection representing 
		nicknames stored in the store.   |  |  
		| GetOutOfOfficeAssistantWithCredentials (UserName, Password)
 | Similar to the OutOfOfficeAssistant property. returns an 
		RDOOutOfOfficeAssistant 
		object that allows to set the Out-Of-Office state and reply text, but 
		also allows to specify the user name and password. 
 
 |  |  
		| GetOwaNicknames 
 | Returns
		RDONickNames collection representing 
		nicknames used by OWA in Exchange 2010. Unlike the nicknames returned 
		from
		GetNicknames,  this collection is read-only. 
 
 |  |  
		| MakeEwsRequest(Data) | Similar to the
mailbox.MakeEwsRequestAsync method exposed for the Web (JS) addins by 
Outlook. Unlike the JavaScript equivalent, MakeEwsRequest in 
Redemption is synchronous and is expected to run on a secondary thread (see
here for more on using Redemption in secondary 
threads). There are no limitation  which EWS call can be made. Note that MakeEwsRequest is designed to work in COM 
(VSTO) addins or Outlook VBA as it intercepts EWS requests made by Outlook 
itself to extract the credentials. It will work outside of the outlook.exe 
process only if Outlook cached the credentials or if RDOSession.LogonHostedExchangeMailbox 
was used to connect to Exchange (which requires explicit credentials). Also note 
that it is expected that the parent RDOSession 
object is created well ahead of time (e.g. when the COM/VSTO addin is loaded) 
prior to calling MakeEwsRequest to allow Redemption sufficient 
time to collect the credentials after Outlook makes its own EWS calls.
 
 
 Data - string. XML request payload
 
 Returns XML string with the server reply
 | 
		payload = _ 
		"<?xml 
		version=""1.0"" encoding=""utf-8""?>" & _ 
		
		"<soap:Envelope 
		xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/""" & _ 
		"              
		
		xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types"">" & _ 
		" 
		<soap:Header><t:RequestServerVersion 
		Version=""Exchange2007_SP1""/></soap:Header>" & _ 
		" 
		<soap:Body>" & _ 
		"   
		<GetDelegate 
		xmlns=""http://schemas.microsoft.com/exchange/services/2006/messages""" & _ 
		"                
		
		xmlns:t=""http://schemas.microsoft.com/exchange/services/2006/types""" & _ 
		"                
		IncludePermissions=""true"">" & _ 
		"     
		<Mailbox>" & _ 
		"       
		<t:EmailAddress>" & smtpAddress & 
		"</t:EmailAddress>" & _ 
		"     
		</Mailbox>" & _ 
		"   
		</GetDelegate>" & _ 
		" 
		</soap:Body>" & _ 
		"</soap:Envelope>" 
		  
		set Session = CreateObject("Redemption.RDOSession") 
		
		Session.MAPIOBJECT = Application.Session.MAPIOBJECT 
		set defaultAccount = Session.Accounts.GetOrder(1).Item(1) 
		if TypeName(defaultAccount) = 
		"RDOExchangeAccount" 
		Then 
		
		  MsgBox 
		"This message box simulates a delay between creating RDOSession object " & _ 
		
		        
		
		"and a call to MakeEwsRequest to allow it to intercept EWS calls made by 
		Outlook" 
		
		  
		Session.CacheAutoDiscoverXml smtpAddress, 
		Application.Session.AutoDiscoverXml 
		'speed things up 
		
		  reply = 
		defaultAccount.MakeEwsRequest(payload) 
		
		  MsgBox reply 
		End 
		If |  
		| 
 |        
 | 
	RDOExchangePublicFoldersStore object | 
 This object represents an Exchange 
Server mailbox message store. Implements all RDOExchangeStore
properties and methods. There are no additional 
properties at this time. This object is returned by the various RDO methods if 
StoreKind property is skPublicFolders. 
	
		| 
 |  
		|  |  
		| 
 |  
		| implements all 
		RDOExchangeStore 
		properties and methods |  
		| 
 |  
		| Properties |  
		| 
 |  
		| ExchangeManageStore | Returns RDOExchangeManageStore 
		object. 
 | skPrimaryExchangeMailbox = 3 set Session = CreateObject("Redemption.RDOSession")
 Session.MAPIOBJECT = Application.Session.MAPIOBJECT
 set Store = Session.Stores.DefaultStore
 if (Store.StoreKind = skPrimaryExchangeMailbox) Then
 set XMS = Store.ExchangeManageStore
 set Table = XMS.GetMailboxTable("")
		'use the current store's server DN
 set Recordset = Table.ExecSQL("SELECT 
		""http://schemas.microsoft.com/mapi/proptag/0x3001001E"" AS 
		PR_DISPLAY_NAME, " & _
 " 
		""http://schemas.microsoft.com/mapi/proptag/0x3003001E"" AS 
		PR_EMAIL_ADDRESS from Table")
 while not Recordset.EOF
 Debug.Print(Recordset.Fields("PR_DISPLAY_NAME").Value 
		&  " - " & Recordset.Fields("PR_EMAIL_ADDRESS").Value)
 Recordset.MoveNext
 wend
 End If
 
 |  
		|  |  |  |  
		| IsCached | Boolean. read/write. Outlook 
		2003 and up only. Returns true if the Exchange 
		mailbox is cached. Note that delegate mailboxes are never cached. Setting this property won't 
		take effect until the next time MAPI logs to the profile. Corresponds to the "Download 
		Public Folder Favorites" checkbox in the Exchange provider properties 
		dialog.   |   |  
		| PrimaryStore 
 | Returns an instance 
of the
RDOExchangeMailboxStore 
object that represents the primary Exchange mailbox in the given Exchange 
account. E.g.. if an Exchange account has 4 stores (primary mailbox M1, 
delegate mailboxes D1 and D2, and a Public Folders store P1), PrimaryStore 
property for all these stores will return the primary mailbox M1. The property was introduced to avoid 
the need to access RDOStore.StoreAccount 
property.  RDOAccount object returned by
RDOStore.StoreAccount. wraps the
IOlkAccount MAPI object, which has thread affinity and can raise an 
exception if accessed on a secondary thread. To avoid the cross-thread access 
exceptions, one can, for example, use
RDOExchangeMailboxStore.PrimaryStore.Owner.SMTPAddress 
in place of RDOExchangeMailboxStore.StoreAccount.CurrentUser.SMTPAddress.   |  |  
		| 
 |  
		| Methods |  
		| 
 |  
		| GetFolderFromSourceKey(SourceKey) 
		  | See 
		RDOExchangeMailboxStore.GetFolderFromSourceKey 
		above   |   |  
		| GetMessageFromSourceKey(FolderSourceKey,
		MessageSourceKey)   | See 
		RDOExchangeMailboxStore.GetMessageFromSourceKey 
		above   |  |  
		|  |  |  |            
This object represents an Exchange 
Active Sync (EAS) store.  
	
		| 
 |  
		|  |  
		| 
 |  
		| implements all RDOStore2 
		properties and methods |  
		| 
 |  
		| Properties |  
		| 
 |  
		| OstPath | String, read only.   Returns full path to the 
		local OST file used to cache the mailbox. 
		  |  |  
		| Owner | RDOAddressEntry, read-only. Return the 
		address entry object representing the store owner. 
 |  |  
		|  |  |  |  
		|  |                                              |