C# kullanarak bir .PST dosyasını okumak mümkün mü? Bunu, bir Outlook eklentisi olarak değil (eğer mümkünse) bağımsız bir uygulama olarak yapmak isterim. Bu söz MailNavigator için SOquestionssimilarother gördük ama C# programlı bunu arıyorum varsaC# içinde bir Outlook (2003/2007) PST dosyasını okuyabilir miyim?
.
Microsoft.Office.Interop.Outlook ad alanına baktım, ancak bu yalnızca Outlook eklentileri için görünüyor. LibPST, PST dosyalarını okuyabiliyor gibi görünüyor, ancak bu C (üzgün Joel, ben learn C before graduating kullanmamıştım).
Herhangi bir yardım çok takdir edilecektir, teşekkürler!
DÜZENLEME:
yanıtlar için teşekkür ederiz! Matthew Ruston'un cevabını cevap olarak kabul ettim çünkü sonuçta beni aradığım koda yönlendirdi. Burada (Microsoft.Office.Interop.Outlook bir başvuru eklemeniz gerekir) çalışmaya ne var basit bir örneğidir:
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 kod, Outlook yüklü olduğunu varsayar ve zaten geçerli kullanıcı için yapılandırılmış. Varsayılan Profili kullanır (Denetim Masası'ndaki Posta'ya giderek varsayılan profili düzenleyebilirsiniz). Bu kod üzerinde önemli bir gelişme, Varsayılan yerine kullanmak için geçici bir profil oluşturmak, ardından tamamlandığında yok etmek olacaktır.
Ben AddStores ve Mağazalar listesi bile Outlook API var olduğunu bilmiyordum. İyi yazı! –
Bir şey mi eksik? Neden outlookNS'un Mağazalar koleksiyonuna erişemiyorum? Bu intellisense içinde değil. –
'Microsoft.Office.Interop.Outlook'u kullanarak dahil ettiniz mi?' senin kodunda –