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 に答える