Skip to main content
 首页 » 编程设计

c#之在 Outlook 中获取电子邮件的链接/路径

2024年02月24日38Terrylee

我正在开发一个应用程序,该应用程序应该从 Outlook 获取电子邮件链接并将其存储在数据库中。

我一直在查看 Microsoft.Office.Interop.Outlook API,但找不到可用于此目的的东西。

有什么想法吗?

请您参考如下方法:

您可以将电子邮件保存为 .msg 文件,然后将其作为字节数组保存到数据库中吗?

否则,有一些方法可以通过编程方式访问邮箱或 outlook .pst 文件,然后您必须编写一个界面,让他们选择要保存的电子邮件,然后将电子邮件分成几部分(主题、收件人、发件人等)保存。 ) 分别存入数据库。

要访问 Exchange 服务器 (Exchange 2007+) 上的邮箱,您可以使用 Exchange Web Services Managed API 1.0 来实现。 EWS API你可以从here下载它

它使访问和检索电子邮件等变得非常简单,因为在 Exchange 2007 之前,这是一件痛苦的事情,涉及解析大量 XML 或使用 CDOEXM。

这是一个如何使用它的例子:

您首先需要创建一个 Exchange 服务。添加对 EWS 的引用并在下面添加 using 行。

using Microsoft.Exchange.WebServices.Data; 
... 
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1); 
service.AutodiscoverUrl( "First.Last@MyCompany.com" ); 

服务启动并运行后,您就可以使用它来查询邮箱:

FindItemsResults<Item> findResults = service.FindItems(WellKnownFolderName.Inbox, 
       new ItemView()); 

这将返回收件箱中的所有电子邮件。然后,您可以使用其属性查看电子邮件的详细信息。即 item.Subject;

但是,如果电子邮件位于 .pst 文件中,您将需要使用 Outlook API,或者我推荐 PST.NET (尽管您确实需要许可证),因为它使它变得容易得多。

下面是一个使用 PST.NET 的例子:

using System; 
using Independentsoft.Pst; 
 
namespace Sample 
{ 
    class Program 
    { 
        static void Main(string[] args) 
        { 
            PstFile file = new PstFile("c:\\testfolder\\Outlook.pst"); 
 
            using (file) 
            { 
                Folder inbox = file.MailboxRoot.GetFolder("Inbox"); 
 
                if (inbox != null) 
                { 
                    ItemCollection items = inbox.GetItems(); 
 
                    for (int m = 0; m < items.Count; m++) 
                    { 
                        if (items[m] is Message) 
                        { 
                            Message message = (Message)items[m]; 
 
                            Console.WriteLine("Id: " + message.Id); 
                            Console.WriteLine("Subject: " + message.Subject); 
                            Console.WriteLine("DisplayTo: " + message.DisplayTo); 
                            Console.WriteLine("DisplayCc: " + message.DisplayCc); 
                            Console.WriteLine("SenderName: " + message.SenderName); 
                            Console.WriteLine("SenderEmailAddress: " + message.SenderEmailAddress); 
                            Console.WriteLine("----------------------------------------------------------------"); 
                        } 
                    } 
                } 
            } 
 
            Console.WriteLine("Press ENTER to exit."); 
            Console.Read(); 
        } 
    } 
}