- r - 以节省内存的方式增长 data.frame
- ruby-on-rails - ruby/ruby on rails 内存泄漏检测
- android - 无法解析导入android.support.v7.app
- UNIX 域套接字与共享内存(映射文件)
是否可以使用 C# 读取 .PST 文件?我想作为一个独立的应用程序来执行此操作,而不是作为 Outlook 插件(如果可能的话)。
如果看过other SO questions similar提到这一点MailNavigator但我希望在 C# 中以编程方式执行此操作。
我看过 Microsoft.Office.Interop.Outlook命名空间,但这似乎只适用于 Outlook 插件。 LibPST似乎能够读取 PST 文件,但这是在 C 中(抱歉乔尔,我没有 learn C before graduating)。
非常感谢任何帮助,谢谢!
编辑:
谢谢大家的回复!我接受了 Matthew Ruston 的回答作为答案,因为它最终引导我找到了我正在寻找的代码。这是我开始工作的一个简单示例(您需要添加对 Microsoft.Office.Interop.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;
}
}
}
注意:此代码假定 Outlook 已安装并已为当前用户配置。它使用默认配置文件(您可以通过转到控制面板中的邮件来编辑默认配置文件)。此代码的一项主要改进是创建一个临时配置文件来代替默认配置文件,然后在完成后将其销毁。
最佳答案
Outlook Interop 库不仅适用于插件。例如,它可用于编写一个只读取所有 Outlook 联系人的控制台应用程序。我很确定标准的 Microsoft Outlook Interop 库可以让您阅读邮件 - 尽管它可能会在 Outlook 中抛出安全提示,用户必须单击才能通过。
编辑:实际使用 Outlook Interop 实现邮件阅读取决于您对“独立”的定义。 Outlook Interop 库需要在客户端计算机上安装 Outlook 才能运行。
// 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();
}
}
}
关于c# - 我可以在 C# 中读取 Outlook (2003/2007) PST 文件吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/577904/
正在计算每月的最后一个工作日,合并如下 - • AI.VOUCHER_DT >= 本月最后一个工作日下午 5:00(太平洋标准时间) • AI.VOUCHER_DT <= 本月最后一个日历日太平洋标准
我想使用 C# 访问我的 Outlook 已发送文件夹,并将那里的邮件移动到我的 PST 中名为 Archive 的文件夹中。这是我正在使用的代码,但出现多个编译错误。这里有更多编码经验的人知道如何完
我正在使用 PST File Format SDK尝试从 Outlook PST 导出中提取一些约会项目数据: int main() { pst myfile(L"export.pst");
这个问题已经有答案了: How to initialize a JavaScript Date to a particular time zone (21 个回答) Convert Javascrip
我们正在研究处理 PST 的东西,所以我们正在尝试使用 java-libpst 创建示例代码。它对我来说工作正常,但我们需要显示 PST 的详细信息,例如 PST 名称、给定 PST 上配置的电子邮件
我找不到完全用 Excel VBA 操作的代码来指向一个不是 Outlook 中默认收件箱的收件箱。 想象一下第二个收件箱,其中有一个用于特殊电子邮件的备用电子邮件地址。 看来Set Inbox =
它最终达到了我不得不寻求帮助的地步。 由于电子邮件服务器的空间限制,我们公司的常见做法是将邮件/日历等从 Outlook 备份到 PST 文件。 我们现在在电子邮件服务器上不再有阻止这种情况的空间限制
我想要当前的日期和时间(太平洋标准时间)。我使用了这段代码 NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [date
我编辑了一个我在网上找到的脚本,将电子邮件移动到各个文件夹。 我想更进一步,将电子邮件移动到单独的 PST 文件中的文件夹。 这将在 Outlook 2007 中运行。 宏源于这个名为“更新”的宏,是
在我的一个模块中,我必须实现以下目标。 我从服务器获取 yyyy-MM-dd'T'HH:mm:ss'Z' 格式的日期。我必须转换此日期和 PST 中的当前日期,然后以小时/分钟/秒为单位显示这两者之间
我正在尝试提取 .pst 文件的内容(作为字符串/文本)。 我尝试了不同的答案,但没有找到任何相关的解决方案。 Outlook PST File Parsing in Python Read PST
在我们的应用程序服务器中,以这样的格式提供日期时间字符串“2013-01-14 T 06:33 PST” 和 “2013-01-14 T 06:33 PDT” 或 “2013-01-14 T 06:3
我需要获取从现在到“America/Los_Angeles”(太平洋标准时间)午夜之间的毫秒数。 midnightAtPST = ???; long millis = ChronoUnit.MILLI
玩弄 Calendar 和 TimeZone 我遇到了以下奇怪的行为。 Calendar pstCal = Calendar.getInstance(TimeZone.getTimeZone("PST
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭
我正在研究 javascript。我有时间以毫秒为单位。所以我必须显示 PST 时区的时间。我试过格林威治标准时间。但是是否有任何选项以 PST 格式显示时间,其中输入以毫秒为单位,如 1671673
我正在使用 java libpst 和 tika 从 pst 文件中提取元数据,我使用了以下代码: int numberOfAttachments = email.getNumberOfAtt
我正在使用java-libpst查看其中有哪些电子邮件和电子邮件附件。现在,请建议一种将所有或选定的电子邮件以及电子邮件附件从 PST 文件提取到本地文件夹的方法。 最佳答案 该库似乎没有尝试将 PS
有没有一种方法可以使用 C# 检查 Microsoft Outlook pst 文件是否受密码保护。我正在尝试使用以下代码读取 pst 文件。 Microsoft.Office.Interop.Out
有没有办法通过 API 调用或注册表项以编程方式查找当前用户的 Outlook .pst 文件的位置? 最佳答案 与 Outlook Redemption ,您可以使用 RDOStores 迭代 VB
我是一名优秀的程序员,十分优秀!