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
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();
}
}
}
Bir node.js bir defada bir satır dosya...
Python ile yeni satır ile ayrılmış dos...
Bash Betik yazma Ve Okuma satır satır ...
okuma varlıkların dosya...
UTF8 bir CSV okuma Python ile dosya...