获取Outlook中的电子邮件链接/路径?

时间:2010-07-06 12:38:32

标签: c# outlook

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

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

有什么想法?

2 个答案:

答案 0 :(得分:2)

在Outlook中没有指向电子邮件的链接。

我想您希望以文本格式存储类似快捷方式的内容,以后可以在Outlook中查找/打开电子邮件。如果您计划使用Outlook Interop API,则可以使用代表您的电子邮件的MailItem对象的EntryID。它是项目的唯一ID,但如果项目在文件夹结构中的其他位置移动,则可以更改。

答案 1 :(得分:2)

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

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

要访问Exchange服务器(Exchange 2007+)上的邮箱,可以使用Exchange Web服务托管API 1.0来执行此操作。 EWS API您可以从here

下载它

这使得访问和检索电子邮件等变得非常简单,因为在Exchange 2007之前,这很麻烦并涉及解析大量XML或使用CDOEXM。

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

首先需要创建Exchange服务。添加对EWS的引用并添加下面的使用行。

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();
        }
    }
}