I would like to acquire all contacts that are shared with the current Outlook user (= acquire all the folders containing contacts that are shared).
It's the kind of sharing where you receive an email invitation from the one who shares the contacts with you. You can then see the folder in your "Persons" tab. The folder is not visible in the "folders" view.
The following link shows a guide on how to reach my goal by enumerating the "nav links" in the elusive "common views" folder and then finally EWS folders via some arcane code.
Sadly, they are using EWS and not the OL interop I am bound to.
I thought I'd get started by acquiring the "Common Views" folder, but I am completely unable to do so. Recursively looking through olApplication.Session.Folders gives me my mailbox and the public folder and their subfolders, but no Common Views folder.
An answer to the following question could probably help me: How do I get a list of recipients whose mailbox I have shared access to via Outlook Interop
I think I could call OpenShared(Default)Folder() with that information.
Any ideas what else I could try?
Related
I've an offline EDB file of exchange server which has around 2 mailboxes and mails inside them. I would like to read them along with mails. I tried searching a lot in the internet, but no where I could get exact information about reading EDB file.
As per my analysis, I've decided to read it using ManagedESENT API (C#). For this, I've got an Open Source http://www.emmet-gray.com/Articles/ViewESE.html.
Using this I'm able to successfully read the tables and data inside each table. But I cannot map the tables and form a user-viewable structure (Username -> Mailbox -> Categories(Contacts, Inbox, Sent Items etc) -> Items inside category) like many utilities do.
I also tried looking at https://github.com/libyal/libesedb. But it's not very clear & din't get anything out of their code or documentation.
Help me get started !!
Thanks in Advance :)
My UWP app needs to share some xml files between different users.
Let's say user A creates the files, and user B needs to access them (read and write).
The files are saved by user A to the App folder on her OneDrive (OneDrive > Apps > MyApp > file.xml).
Now when user B is using the app, he needs to access the files on A's OneDrive.
As far as I can tell, using the C# OneDrive SDK I have two ways to have B access the files:
1) User A shares the MyApp folder with user B, and sends him the folder id. User B enters the folder id in the app and the app can get to the files using the folder id.
2) User A shared the MyApp folder with user B; user B adds the shared folder to his OneDrive; now the app can search for the folder by looking through the children of Drive/Root and finding a folder that has the right name and has a remote item. The app can get to the files using the remote item id.
I don't really like either solution because both of them rely on work by the user that is error prone and likely not something that they have had to do before (sending a weird id in an email, entering it in the app, or adding the shared folder to one's OneDrive).
Ideally I would have user A share the folder with B and then the app would somehow find it through B's OneDrive (without B explicitly adding it) but I haven't found a way to do that with the C# SDK.
For whoever has the same problem:
As it turns out, it should be possible to find folders shared with the user through the API, but it doesn't work because of this bug: https://github.com/OneDrive/onedrive-sdk-csharp/issues/133
There is a fix for the bug that applies only to version 1.2 of the API amd it can be found in this branch: https://github.com/OneDrive/onedrive-sdk-csharp/tree/v1-maintenance
Consider the following scenario:
Sombody shared a calendar with me. I have full access to this calendar. When i delete an Item in the calendar the Folder.BeforeItemMove Event is fired. So far so good.
I want to Track deletion by check wether the MoveTo Entry id is null or the Entry id of the Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems) which works.
Now back to the case where the item is in a shared folder:
As per documentation the Property olFolderDeletedItems is a no go as parameter for GetSharedDefaultFolders() (Just to be sure i accessed the other folders which were allowed which worked)
I tried to Iterate over the Stores collection. No calendar there
I tried to Access the Store Property on the MoveTo folder -> null
I tried to get the Store from the Session (to inspect the PR_IPM_WASTEBASKET_ENTRYID) -> Fails
I CAN get the folder name Problem with this is , it might be renamed and/or localized and i do not want an array with all the deleted folder names floating around if i can't help it
I tested all of this using either plain OOM or redemptions Folder interface
Any Ideas?
(Tested in Outlook 2016)
RDOStore.GetDefaultFolder(olFolderDeletedItems) and RDOSession.GetSharedDefaultFolder(olFolderDeletedItems) both work in Redemption.
If you have access to the Calendar as a Shared Calendar (e.g. Sent as EMail invitation to you via the OWA) deleted Items go to YOUR deleted items Folder. This you can get via
Application.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderDeletedItems)
If the Calendar is in a second mailbox in your profile the deleted item go to the deleted items folder of THAT account which you can acces via
Outlook.Store _Store = MoveTo.Store;
Outlook.Folder _Folder = MoveTo.GetDefaultFolder (OlDefaultFolders.olFolderDeletedItems) as Outlook.Folder;
You can differntiate these two scenarios by Checking if the Folder.Store is null (which it is in the case of an Shared non mailbox calendar)
I'm trying to get all the Deleted Items or Trash folders for all the mail accounts in Outlook. I'm using Outlook Interop in C#, but I can only find the way to get the deleted items folder in the default mail account on MSDN: Application.Session.GetDefaultFolder(OlDefaultFolders.olFolderDeletedItems).
Does anybody know if there is a way that I can get the deleted items folder in every email accounts in Outlook?
Loop through the Namespace.Stores collection and call Store.GetDefaultFolder(olFolderDeletedItems) instead of Namespace.GetDefaultFolder.
In response to the "should work on Outlook 2007" requirement you added in your response to Dmitry's answer, I'd suggest the following approach:
Use a PropertyAccessor to acquire the PR_IPM_WASTEBASKET_ENTRYID ("http://schemas.microsoft.com/mapi/proptag/0x35E30102") of the store
Use PropertyAccessor.BinaryToString to convert it to an EntryID you can use in the COM/interop layer
Use NameSpace.GetItemFromID to access the deleted items folder folder, given it's EntryID and the EntryID of the store.
My client has created rooms on online exchange. I can see list of rooms at outlook.office365.com
I am following this url (http://msdn.microsoft.com/EN-US/library/office/dn643730(v=exchg.150).aspx) to get the room list from exchange online, but empty list is being returned.
What am i doing wrong? Can anybody help me out?
Unfortunately the GetRooms and GetRoomLists methods, which at a glance appear to be exactly what you are looking for, actually require that one or more "Room Lists" be created on the Exchange server, with one or more existing rooms added to the relevant "Room Lists". Only once this is done will the methods you refer to actually produce any results.
Unfortunately all my research into this topic has (so far) found that the ONLY way anyone can create a room list is via a PowerShell command on the exchange server. It can't be configured through Office 365 settings or through any hosted exchange provider's interface (such as hosted exchange made available via Parallels systems).
If you do have powershell access, try something like this:
http://technet.microsoft.com/en-us/library/ee633471%28v=exchg.141%29.aspx
They way I did was to name all conference rooms with the prefix Conf. For example, ConfAAA1, ConfBBB2, ConfCCC3, etc. Then to retrieve a list of all rooms:
List<NameResolution> result = ExchangeService.ResolveName("Conf",
ResolveNameSearchLocation.ContactsThenDirectory, true).ToList<NameResolution>();