SORU
23 ŞUBAT 2009, PAZARTESİ


Ben bir Outlook (2003/2007) PST dosya okuma C#?

Bir okuma yapmak mümkün .PST dosyası kullanarak C#? Bir Outlook eklenti eğer bu mümkün değilse () olarak değil, bağımsız bir uygulama olarak bunu yapmak istiyorum.

Eğer MailNavigator ama C bu program aracılığıyla yapmak için arıyorum bu söz 4* SO questions similar *gören varsa#.

Microsoft.Office.Interop.Outlook ad baktım ama sadece Outlook eklentileri için görünüyor. LibPST PST dosyaları okumak mümkün görünüyor, ama bu C (pardon Joel, learn C before graduating etmedim).

Herhangi bir yardım büyük mutluluk duyacağız, teşekkürler!

DÜZENLEME:

Cevaplar için hepinize teşekkürler! Sonuçta aradığım kod götürdü çünkü cevap olarak Matthew Ruston tepkisi kabul ettim. Burada çalışmak için ne örnek (Microsoft için bir başvuru eklemek gerekir.basit Office.Birlikte çalışabilirlik.Outlook):

using System;
using System.Collections.Generic;
using Microsoft.Office.Interop.Outlook;

namespace PSTReader {
    class Program {
        static void Main () {
            try {
                IEnumerable<MailItem> mailItems = readPst(@"C:\temp\PST\Test.pst", "Test PST");
                foreach (MailItem mailItem in mailItems) {
                    Console.WriteLine(mailItem.SenderName   " - "   mailItem.Subject);
                }
            } catch (System.Exception ex) {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }

        private static IEnumerable<MailItem> readPst(string pstFilePath, string pstName) {
            List<MailItem> mailItems = new List<MailItem>();
            Application app = new Application();
            NameSpace outlookNs = app.GetNamespace("MAPI");
            // Add PST file (Outlook Data File) to Default Profile
            outlookNs.AddStore(pstFilePath);
            MAPIFolder rootFolder = outlookNs.Stores[pstName].GetRootFolder();
            // Traverse through all folders in the PST file
            // TODO: This is not recursive, refactor
            Folders subFolders = rootFolder.Folders;
            foreach (Folder folder in subFolders) {
                Items items = folder.Items;
                foreach (object item in items) {
                    if (item is MailItem) {
                        MailItem mailItem = item as MailItem;
                        mailItems.Add(mailItem);
                    }
                }
            }
            // Remove PST file from Default Profile
            outlookNs.RemoveStore(rootFolder);
            return mailItems;
        }
    }
}

Not:Bu kodu Outlook yüklü ve geçerli kullanıcı için yapılandırılmış olduğunu varsayar. Varsayılan Profil (Denetim Masası Posta için varsayılan profili düzenleyebilirsiniz) kullanır. Bu kod üzerinde büyük bir gelişme Varsayılan yerine kullanmak için geçici bir profil oluşturmak, tamamlandığında yok etmek olacaktır.

CEVAP
23 ŞUBAT 2009, PAZARTESİ


Kütüphane birlikte Çalışabilirlik Outlook sadece eklentileri için değil. Örneğin sadece Outlook okur konsol uygulaması bir Rehber yazmak için kullanılabilir. Kullanıcının tıklama yoluyla olacak Outlook standart Microsoft Outlook ile birlikte Çalışabilirlik kütüphane muhtemelen bir güvenlik istemini atmak olacak olsa senin posta okumama izin verecek eminim.

DÜZENLERAslında uygulama posta okuma Outlook ile birlikte Çalışabilirlik kullanarak 'bağımsız' anlamına gelir. ne kastettiğinize bağlı. Lib birlikte Çalışabilirlik Outlook çalışması için istemci makinede yüklü olmasını gerektirir.

// Dumps all email in Outlook to console window.
// Prompts user with warning that an application is attempting to read Outlook data.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Outlook = Microsoft.Office.Interop.Outlook;

namespace OutlookEmail
{
class Program
{
    static void Main(string[] args)
    {
        Outlook.Application app = new Outlook.Application();
        Outlook.NameSpace outlookNs = app.GetNamespace("MAPI");
        Outlook.MAPIFolder emailFolder = outlookNs.GetDefaultFolder(Microsoft.Office.Interop.Outlook.OlDefaultFolders.olFolderInbox);

        foreach (Outlook.MailItem item in emailFolder.Items)
        {
            Console.WriteLine(item.SenderEmailAddress   " "   item.Subject   "\n"   item.Body);
        }
        Console.ReadKey();
    }
}
}

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google

    Google

    18 EYLÜL 2005
  • Pepsi

    Pepsi

    1 Kasım 2005
  • SerienTrailerMP

    SerienTraile

    7 HAZİRAN 2012