2012-03-06 16 views
0

電子メールを読み取るアプリケーションで作業しています。 Exchange Server 2003からローカルマシンへのすべての電子メールを取得するためのwebdav以外の方法はありますか。 webdavの問題は、配信されていないメールの本文を取得しないことです。Exchange Server 2003アカウントの電子メールを読み取る

私は未配信のメールの空のテキスト記述を取得し、出力XMLで
CredentialCache creds = new CredentialCache(); 
      creds.Add(new Uri(a), "NTLM", 
       new NetworkCredential("xxxxx", "xxxxxx", "xxxxx.com")); 

      List<Mail> unreadMail = new List<Mail>(); 
      string reqStr = 

      @"<?xml version=""1.0""?> 
       <g:searchrequest xmlns:g=""DAV:""> 
        <g:sql> 
         SELECT 
          ""urn:schemas:mailheader:from"", 
          ""urn:schemas:mailheader:to"", 
          ""urn:schemas:httpmail:textdescription"" 

         FROM 
          ""http://xxxx.com/exchange/xxxx/Inbox/"" 
         WHERE 

          ""urn:schemas:httpmail:subject"" = 'Undeliverable: xxxx'        

         </g:sql> 
       </g:searchrequest>"; 



      byte[] reqBytes = Encoding.UTF8.GetBytes(reqStr); 


      HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(a); 
      request.Credentials = creds; 
      request.Method = "SEARCH"; 
      request.ContentLength = reqBytes.Length; 
      request.ContentType = "text/xml"; 
      request.Timeout = 300000; 
      using (Stream requestStream = request.GetRequestStream()) 
      { 
       try 
       { 
        requestStream.Write(reqBytes, 0, reqBytes.Length); 
       } 
       catch 
       { 
       } 
       finally 
       { 
        requestStream.Close(); 
       } 
      } 
      HttpWebResponse response = (HttpWebResponse)request.GetResponse(); 
      using (Stream responseStream = response.GetResponseStream()) 
      { 
       try 
       { 
        XmlDocument document = new XmlDocument(); 
        document.Load(responseStream); 


        XmlNamespaceManager nsmgr = new XmlNamespaceManager(document.NameTable); 
        nsmgr.AddNamespace("a", "DAV:"); 
        nsmgr.AddNamespace("b", "urn:uuid:c2f41010-65b3-11d1-a29f-00aa00c14882/"); 
        nsmgr.AddNamespace("c", "xml:"); 
        nsmgr.AddNamespace("d", "urn:schemas:mailheader:"); 
        nsmgr.AddNamespace("e", "urn:schemas:httpmail:"); 


        XmlNodeList responseNodes = document.GetElementsByTagName("a:response"); 
        foreach (XmlNode responseNode in responseNodes) 
        { 

         XmlNode uriNode = responseNode.SelectSingleNode("child::a:href", nsmgr); 
         XmlNode propstatNode = responseNode.SelectSingleNode("descendant::a:propstat[a:status='HTTP/1.1 200 OK']", nsmgr); 
         if (propstatNode != null) 
         { 
          // read properties of this response, and load into a data object 
          XmlNode fromNode = propstatNode.SelectSingleNode("descendant::d:from", nsmgr); 
          XmlNode descNode = propstatNode.SelectSingleNode("descendant::e:textdescription", nsmgr); 
          XmlNode toNode = propstatNode.SelectSingleNode("descendant::d:to", nsmgr); 


          // make new data object 

          Mail mail = new Mail(); 
          if (uriNode != null) 
           mail.Uri = uriNode.InnerText; 
          if (fromNode != null) 
           mail.From = fromNode.InnerText; 
          if (descNode != null) 
           mail.Body = descNode.InnerText; 
          if (toNode != null) 
           mail.To = toNode.InnerText; 
          unreadMail.Add(mail); 

         } 
        } 
        var ac = unreadMail; 

       } 
       catch (Exception e) 
       { 
        string msg = e.Message; 
       } 
       finally 
       { 

        responseStream.Close(); 
       } 
      } 

<a:status>HTTP/1.1 404 Resource Not Found</a:status><a:prop><e:textdescription /></a:prop></a:propstat></a:response> 
+2

(などExchangeサーバーの構成に応じて。)いくつかの方法があります...いくつかのコードを表示してください...あなたは何を試してみましたか?何がうまくいきませんか? – Yahia

+0

@Yahiaは...あなたのための –

+0

感謝を見る...以下の私の答えを参照してください。応答がありますが、無料のオープンソースのlibがあります。 webdavを使って電子メール添付ファイルを入手できますか? – Yahia

答えて

1

- WebDAVは、使用するかなり困難で、よく以降のバージョン(2010)でサポートされていない、MSは、EWSを提供しますが、これらは、古いバージョンでは動作しません。私のPOVから

あなたは(商用!)次のコンポーネントのいずれかを使用することができます。

もう一つのポイント:

Whを特定の「添付ファイル」のwinmail.datのように自動的に「デコード」しているOutlookにより、ディスプレイ上:これはX-MS-ENUMATT動詞を介してアクセスする必要のWebDAVに(しかし、注意してください - Undeliverableメールを処理する途中、私は体が時々添付ファイルとして提供されていることを経験をしました)。

+0

良くおかげで、私は添付ファイルとして「変装」「体」は潜在的にあると思われる... ....やっているアップデートのための –

+1

AI25 @私は、このための任意のフリーオープンソースのライブラリを知らない...交流WebDAVプロトコルでIIRC ...そのためMSDN上のExchangeドキュメントを確認することができ動詞名 'ENUMATT'または類似があります...しかし、添付ファイルが 'winmail.dat'の場合は、書式は文書化されていません! – Yahia

1

あなたはOWAが(もちろんその中にメールIDを指定して)ないと、サーバと同じようにHTTPリクエストを送信してみてくださいすることができますあなたが解析できるHTMLを取得します。

も ​​- 元のメッセージは「未配信」、電子メールの添付ファイルの配列であるかどうかを確認します。私は、Exchangeサーバーと通信するためにいくつかのオプションを参照してください