son qué que ost cómo convertir como archivos archivo abrir c# outlook

c# - qué - que son archivos ost outlook



Accediendo al archivo ost de Outlook (2)

He visto la diferencia entre los archivos pst y ost y actualmente estoy trabajando para acceder al archivo pst outlook a través del siguiente código que se proporciona a continuación. ¿Hay alguna forma de usar el mismo código para acceder al archivo ost? ¿Puede alguien referirme a esto?

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; }


Debe informarse sobre lo que es OST / PST, ya que el acceso a ellos no es muy diferente, ambos son objetos de la tienda , por lo que tienen la misma interfaz.

Pruebe estas fuentes para empezar y experimente usted mismo, ya que es la mejor manera de entender cómo funcionan las cosas.

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


Después de descubrir cómo construir realmente el código proporcionado por OP, me pareció muy útil comenzar con Outlook, por lo que me gustaría compartir el código completo a continuación.

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

Para completar las piezas faltantes, tomé prestado de https://support.microsoft.com/en-us/kb/310259 , para EnumerateFolders: https://msdn.microsoft.com/en-us/library/office/ff184607 .aspx