Access Outlook ost file

I saw the difference between the pst and ost files and am currently working on accessing the Outlook pst file using the following code below. Is it possible to use the same code to access the ost file? Can anyone refer to this?

private DataTable GetInboxItems() { DataTable inboxTable; //try //{ filter = "[ReceivedTime] >= '" + dtpStartDate.Value.ToString("dd/MM/yyyy 12:00 AM") + "' and [ReceivedTime] <= '" + dtpEndDate.Value.ToString("dd/MM/yyyy 11:59 PM") + "'"; Outlook.Application outlookApp = GetApplicationObject(); Outlook.Folder root = outlookApp.Session.DefaultStore.GetRootFolder() as Outlook.Folder; EnumerateFolders(root); //string filter = "[ReceivedTime] > '" + dtpStartDate.Value.ToString("dd/MM/yyyy") + "'"; //inbox Outlook.MAPIFolder inboxFolder = outlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); inboxTable = CreateTable(); int count = 0; if (inboxFolder.Items.Count > 0) { var restrictedItems = inboxFolder.Items.Restrict(filter); restrictedItems.Sort("[ReceivedTime]", true); //descending //foreach (var item in inboxFolder.Items) foreach (var item in restrictedItems) { var mail = item as Outlook.MailItem; if (mail != null) { //try //{ DataRow row = inboxTable.NewRow(); //row["sn"] = (++count).ToString(); row["sn"] = mail.EntryID + " " + mail.ReceivedByEntryID; row["MailType"] = "Inbox"; row["SenderName"] = mail.SenderName; row["SenderEmail"] = mail.SenderEmailAddress; row["ReceivedDate"] = mail.ReceivedTime; row["Subject"] = mail.Subject; row["Body"] = mail.Body != null ? (mail.Body.Length > 25 ? mail.Body.Substring(0, 25) : mail.Body) : null; //row["Body"] = mail.Body != null ? mail.Body : ""; row["MailSize"] = mail.Size.ToString(); string attachments = null; if (mail.Attachments.Count > 0) { foreach (var attachment in mail.Attachments) { if (((Outlook.Attachment)attachment) != null) //attachments = ((Outlook.Attachment)attachment).FileName + " " + ((Outlook.Attachment)attachment).Size.ToString() + ", "; attachments += (((Outlook.Attachment)attachment).Size / 1024).ToString() + " KB, "; } } row["AttachmentCount"] = mail.Attachments.Count; if (attachments != null) row["AttachmentSize"] = attachments.Substring(0, attachments.Length - 2); inboxTable.Rows.Add(row); } //catch (Exception ex) //{ // return null; //} } } return inboxTable; } 
+4
source share
2 answers

You need to educate yourself in what OST / PST is, since access to them is not much different, both Store so they have the same interface.

Try using these sources to get started and experiment, as this is the best way to understand how the material works.

http://en.wikipedia.org/wiki/Personal_Storage_Table

http://msdn.microsoft.com/en-us/library/bb609139(v=office.14).aspx

http://msdn.microsoft.com/en-us/library/ff184648(v=office.14).aspx

http://msdn.microsoft.com/en-us/library/bb208208(v=office.12).aspx

http://www.c-sharpcorner.com/UploadFile/rambab/OutlookIntegration10282006032802AM/OutlookIntegration.aspx

+1
source

After I figured out how to actually build the code provided by OP, it was very useful for me to get started in Outlook, so I would like to share the code below.

 using System; using System.Collections.Generic;//List using System.Linq;//Array //using System.Text; //using System.Threading.Tasks; using System.Diagnostics;//Process using System.Runtime.InteropServices;//Marshal using System.Data;//DataTable using System.Reflection;//Missing using Microsoft.Office.Interop.Outlook;//.OST files, needs Microsoft.Office.Interop.Outlook.dll //TO DO: If you use the Microsoft Outlook 11.0 Object Library, uncomment the following line. using Outlook = Microsoft.Office.Interop.Outlook; namespace WatchOutlookMails { class StoreFormat { public DataTable GetInboxItems(DateTime dtpStartDate, DateTime dtpEndDate) { DataTable inboxTable; string filter = string.Format("[ReceivedTime] >= '{0:dd/MM/yyyy 12:00 AM}' and [ReceivedTime] <= '{1:dd/MM/yyyy 11:59 PM}'", dtpStartDate, dtpEndDate); Outlook.Application outlookApp = GetApplicationObject(); #if false//only needed if you want to select another folder Outlook.Folder root = outlookApp.Session.DefaultStore.GetRootFolder() as Outlook.Folder; EnumerateFolders(root); #endif //inbox Outlook.MAPIFolder inboxFolder = outlookApp.Session.GetDefaultFolder(Outlook.OlDefaultFolders.olFolderInbox); inboxTable = CreateTable(); if (inboxFolder.Items.Count > 0) { Items restrictedItems = inboxFolder.Items.Restrict(filter); const bool SortDescending = true; restrictedItems.Sort("[ReceivedTime]", SortDescending); foreach (var item in restrictedItems)//item is a "COM Object" (?) { MailItem mail = item as Outlook.MailItem; if (mail != null) { //try //{ DataRow row = inboxTable.NewRow(); //row["sn"] = (++count).ToString(); row["sn"] = mail.EntryID + " " + mail.ReceivedByEntryID; row["MailType"] = "Inbox"; row["SenderName"] = mail.SenderName; row["SenderEmail"] = mail.SenderEmailAddress; row["ReceivedDate"] = mail.ReceivedTime; row["Subject"] = mail.Subject; row["Body"] = mail.Body != null ? (mail.Body.Length > 25 ? mail.Body.Substring(0, 25) : mail.Body) : null; //row["Body"] = mail.Body != null ? mail.Body : ""; row["MailSize"] = mail.Size.ToString(); int AttachmentSize = 0; foreach (Outlook.Attachment attachment in mail.Attachments) { if (attachment != null) AttachmentSize += attachment.Size; } row["AttachmentCount"] = mail.Attachments.Count; row["AttachmentSize"] = AttachmentSize; inboxTable.Rows.Add(row); //catch (Exception ex) //{ // break; //} } } } return inboxTable; } private DataTable CreateTable() { DataTable T = new DataTable(); T.Columns.Add("sn", typeof(string)); T.Columns.Add("MailType", typeof(string)); T.Columns.Add("SenderName", typeof(string)); T.Columns.Add("SenderEmail", typeof(string)); T.Columns.Add("ReceivedDate", typeof(string)); T.Columns.Add("Subject", typeof(string)); T.Columns.Add("Body", typeof(string)); T.Columns.Add("MailSize", typeof(int)); T.Columns.Add("AttachmentCount", typeof(int)); T.Columns.Add("AttachmentSize", typeof(int)); return T; } private void EnumerateFoldersInDefaultStore() { Outlook.Application outlookApp = GetApplicationObject(); Outlook.Folder root = outlookApp.Session.DefaultStore.GetRootFolder() as Outlook.Folder; EnumerateFolders(root); return; } private void EnumerateFolders(Outlook.Folder folder) { Outlook.Folders childFolders = folder.Folders; if (childFolders.Count > 0) { foreach (Outlook.Folder childFolder in childFolders) { // Write the folder path. //Debug.WriteLine(childFolder.FolderPath); // Call EnumerateFolders using childFolder. // Uses recursion to enumerate Outlook subfolders. EnumerateFolders(childFolder); } } return; } /// <summary> /// obtain an Application object that represents an active instance of Microsoft Outlook, /// if there is one running on the local computer, or to create a new instance of Outlook, /// log on to the default profile, and return that instance of Outlook /// </summary> /// <returns></returns> private Outlook.Application GetApplicationObject() { // source: https://msdn.microsoft.com/en-us/library/ff462097.aspx Outlook.Application application = null; // Check whether there is an Outlook process running. if (Process.GetProcessesByName("OUTLOOK").Count() > 0) { // If so, use the GetActiveObject method to obtain the process and cast it to an Application object. application = Marshal.GetActiveObject("Outlook.Application") as Outlook.Application; } else { // If not, create a new instance of Outlook and log on to the default profile. application = new Outlook.Application(); Outlook.NameSpace nameSpace = application.GetNamespace("MAPI"); nameSpace.Logon("", "", Missing.Value, Missing.Value); nameSpace = null; } // Return the Outlook Application object. return application; } }//end class }//end ns 

To fill in the missing parts, I borrowed from https://support.microsoft.com/en-us/kb/310259 , for EnumerateFolders: https://msdn.microsoft.com/en-us/library/office/ff184607.aspx

+4
source

Source: https://habr.com/ru/post/1479111/


All Articles