【问题标题】:Searching through Public Folders - Exchange 2003搜索公用文件夹 - Exchange 2003
【发布时间】:2013-07-10 01:37:07
【问题描述】:

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

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

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

【问题讨论】:

    标签: c# webdav exchange-server


    【解决方案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;
                        }
                   }
              }
         }
    }
    

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

    【讨论】:

    • 应该注意的是,这个解决方案取决于在运行他的代码的任何机器上安装 Microsoft Outlook。
    • 是的,您应该考虑使用 MAPI 而不是 Outlook 自动化。代码非常相似(因为 Outlook 只是包装了 MAPI)
    【解决方案2】:

    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 参考 - 上面的代码最初用于处理所选配置文件的收件箱中的一些邮件项目

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-21
      • 2011-03-21
      • 2010-09-07
      • 2019-08-07
      • 1970-01-01
      • 2015-03-18
      • 2022-08-10
      • 1970-01-01
      相关资源
      最近更新 更多