Forum Discussion
API / link for a list of Outlook/OWA/Office default folder names/strings
- Mar 09, 2021
Thank you for your help. I've created the following class which I believe could and should be added to the official API.
using System; using System.Collections.Generic; using System.Reflection; using Oulook = Microsoft.Office.Interop.Outlook; namespace OutlookDefualtFolderNames { public static class OutlookToolsHMS { private const string k_MapiNamespaceStr = "mapi"; private static Oulook.NameSpace GetOutlookNameSpace() { Oulook.Application oApp; Oulook.NameSpace oNS; // Create the Outlook application. // in-line initialization oApp = new Oulook.Application(); // Get the MAPI namespace. oNS = oApp.GetNamespace(k_MapiNamespaceStr); // Log on by using the default profile or existing session (no dialog box). oNS.Logon(Missing.Value, Missing.Value, false, true); // Alternate logon method that uses a specific profile name. // TODO: If you use this logon method, specify the correct profile name // and comment the previous Logon line. //oNS.Logon("profilename",Missing.Value,false,true); return oNS; } public static List<string> GetAllDefualtTranslatedFolderNames() { List<string> folderNames = new List<string>(); Oulook.NameSpace oNS = GetOutlookNameSpace(); foreach (var folder in Enum.GetValues(typeof(Oulook.OlDefaultFolders))) { try { folderNames.Add(oNS.GetDefaultFolder((Oulook.OlDefaultFolders)folder).Name); } catch { } } return folderNames; } public static List<string> GetDefualtTranslatedFolderName(string name) { List<string> folderNames = new List<string>(); Oulook.NameSpace oNS = GetOutlookNameSpace(); string folderName; foreach (var folder in Enum.GetValues(typeof(Oulook.OlDefaultFolders))) { try { if (folder.ToString().ToLower().Contains(name.ToLower())) { folderName = oNS.GetDefaultFolder((Oulook.OlDefaultFolders)folder).Name; folderNames.Add(folderName); } } catch { } } return folderNames; } } }
When filtering by folder name, my process would fail. Yes, if I would use the folder ID instead of the folder name, the process will survive those changes, but if my process also logged every new email with the following message:
"New Email received in " + folder name + " from " + sender name
because the owner wants to analyze his workers' most common language or any other reason he asked me to add these log messages, I need to have the folder name.
Please assist if you can, and if you can't, please stop challenging me in unnecessary explanations.
- Victor_IvanidzeMar 09, 2021Bronze Contributor
Hi sagisela,
great!
- sagiselaMar 09, 2021Copper Contributor
Thank you for your help. I've created the following class which I believe could and should be added to the official API.
using System; using System.Collections.Generic; using System.Reflection; using Oulook = Microsoft.Office.Interop.Outlook; namespace OutlookDefualtFolderNames { public static class OutlookToolsHMS { private const string k_MapiNamespaceStr = "mapi"; private static Oulook.NameSpace GetOutlookNameSpace() { Oulook.Application oApp; Oulook.NameSpace oNS; // Create the Outlook application. // in-line initialization oApp = new Oulook.Application(); // Get the MAPI namespace. oNS = oApp.GetNamespace(k_MapiNamespaceStr); // Log on by using the default profile or existing session (no dialog box). oNS.Logon(Missing.Value, Missing.Value, false, true); // Alternate logon method that uses a specific profile name. // TODO: If you use this logon method, specify the correct profile name // and comment the previous Logon line. //oNS.Logon("profilename",Missing.Value,false,true); return oNS; } public static List<string> GetAllDefualtTranslatedFolderNames() { List<string> folderNames = new List<string>(); Oulook.NameSpace oNS = GetOutlookNameSpace(); foreach (var folder in Enum.GetValues(typeof(Oulook.OlDefaultFolders))) { try { folderNames.Add(oNS.GetDefaultFolder((Oulook.OlDefaultFolders)folder).Name); } catch { } } return folderNames; } public static List<string> GetDefualtTranslatedFolderName(string name) { List<string> folderNames = new List<string>(); Oulook.NameSpace oNS = GetOutlookNameSpace(); string folderName; foreach (var folder in Enum.GetValues(typeof(Oulook.OlDefaultFolders))) { try { if (folder.ToString().ToLower().Contains(name.ToLower())) { folderName = oNS.GetDefaultFolder((Oulook.OlDefaultFolders)folder).Name; folderNames.Add(folderName); } } catch { } } return folderNames; } } }
- Victor_IvanidzeMar 08, 2021Bronze Contributor
Hi sagisela, please don't be offended - I'm really trying to help.
You wrote:
Yes, if I would use the folder ID instead of the folder name, the process will survive those changes, but if my process also logged every new email with the following message:
"New Email received in " + folder name + " from " + sender name
because the owner wants to analyze his workers' most common language or any other reason he asked me to add these log messages, I need to have the folder name.Look. If you know the olFolderInbox the 2 strings of VBA code
Set objFolder=objNameSpace.GetDefaultFolder(olFolderInbox)
Debug.Print objFolder.Name
will give you the language-specifics folder name.
I'm a bit tired so it's my last reply. Good luck.