0

我有一个程序需要连接到我公司的 Exchange 2003 服务器并查看公用文件夹中的特定文件夹。我最终将遍历这个文件夹并扫描(使用 OCR)每封电子邮件,以便我可以解析我们数据库的信息。

但是,我什至不知道如何开始这样做。我在网上看到了有关 WebDAV 的信息,这似乎是在 C# 和 Exchange 2003 服务器上执行此操作的唯一方法。如果有人可以请让我知道一种更简单的方法,那就太好了。

如果没有,那么请给我一些WebDAV的简单解释。我在网上看到的关于它的东西使它看起来比我想象的要复杂得多。至少对于我正在尝试做的任务。

4

2 回答 2

1

首先添加对 Microsoft.Office.Interop.Outlook 的引用,然后添加这些 using 语句

using Microsoft.Office.Interop.Outlook;
using _Application = Microsoft.Office.Interop.Outlook._Application;
using Outlook = Microsoft.Office.Interop.Outlook;

然后添加这个

//declare Outlook application             
_Application objOutlook = new Outlook.Application();  //create it
_NameSpace objNs = objOutlook.Session; //create new session

MAPIFolder oPublicFolders = objNs.Folders["Public Folders"];
MAPIFolder oAllPublicFolders = oPublicFolders.Folders["All Public Folders"];
Items itms = oAllPublicFolders.Items;

foreach (MailItem item in itms)
{
     GetNewMailItem(objOutlook, objContacts, item);
}

Marshal.ReleaseComObject(objOutlook); //release outlook com object

下一部分正是我所做的,请更改所有这些代码以满足您的需求。

private static void GetNewMailItem(_Application objOutlook, MAPIFolder objContacts, MailItem item)
{
     if(item.ReceivedTime.Date == DateTime.Now.Date.AddDays(-1) || item.UnRead)
     {
          if (item.Attachments.Count > 0)
          {
               var attachments = item.Attachments;
               foreach (Attachment attachment in attachments)
               {
                    if(attachment.Type == OlAttachmentType.olEmbeddeditem)
                    {
                         ProcessEmbeddedEmailAttachment(attachment, objOutlook, objContacts);
                    }
                    else if (attachment.FileName.EndsWith(".doc") || attachment.FileName.EndsWith(".docx"))
                    {
                         ExtractAttachment(attachment);
                         item.UnRead = false;
                    }
               }
          }
     }
}

我省略了其余的代码,因为它是特定于我的处理的。

于 2013-07-09T17:02:14.840 回答
0

MAPI 类似(您将需要安装 CDO 1.21 - Exchange 的更高版本不再使用 CDO,而是使用 Exchange Web 服务)

向您的项目添加对 MAPI 的引用。代码类似于其他答案:

var session = new Session();

// Need this to pass null values to MAPI calls - can't remember why exactly - YMMV
object mObj = System.Reflection.Missing.Value;
session.Logon(MailProfileName, mObj, false, mObj, mObj, mObj, mObj);

// Get the inbox for now for the current user
inbox = (Folder)session.GetDefaultFolder(1);

// more processing etc...

显然看看 CDO 参考 - 上面的代码最初用于处理来自所选配置文件的收件箱中的一些邮件项目

于 2013-07-09T17:37:07.973 回答