如何使用程序来访问HOTMAIL的邮件

using System;
using System.Diagnostics;
using System.IO;
using System.Net;
using System.Text;
using System.Xml;
using System.Web;

namespace Hotmail
{
 
/// <summary>
 
/// HotmailProxy is able to speak HttpMail to various
 
/// Hotmail servers across the world.
 
/// </summary>

 public class HotmailProxy
 
{
  
/// <summary>
  
/// Storage area for cookies.
  
/// </summary>

  private CookieContainer ccContainer;

  
/// <summary>
  
/// Creates a new instance of HotmailHttp.
  
/// </summary>

  public HotmailProxy()
  
{
   Trace.WriteLine(
"Creating new instance.");
   ccContainer 
= new CookieContainer();
  }


  
/// <summary>
  
/// Sends the given request to the given destination
  
/// and returns the answer from the server.
  
/// </summary>
  
/// <param name="request">The request to send.</param>
  
/// <param name="destination">The destination to send the request to.</param>
  
/// <returns>The answer from the remote host.</returns>

  public string SendRequest(string request, Uri destination)
  
{
   
// pass along
   return SendRequest(request,destination,null);
  }


  
/// <summary>
  
/// Sends the given request to the given destination
  
/// and returns the answer from the server.
  
/// </summary>
  
/// <param name="request">The request to send.</param>
  
/// <param name="destination">The destination to send the request to.</param>
  
/// <param name="credential">The network credentials to use with the request.</param>
  
/// <returns>The answer from the remote host.</returns>

  public string SendRequest(string request, Uri destination, NetworkCredential credential)
  
{
   
// Verify input
   if(request == null || request.Trim().Length == 0)
    
throw new ArgumentNullException("request");
   
else if (destination == null)
    
throw new ArgumentNullException("destination");
   
else
   
{
    
// Get byte[] and send the request using private method.
    byte[] xmlBytes = Encoding.ASCII.GetBytes(request);
    
return SendRequestTo(xmlBytes,destination, credential);
   }

  }


  
/// <summary>
  
/// Sends the given byte[] to the given remote host using
  
/// authentication with the supplied credentials.
  
/// </summary>
  
/// <param name="requestBytes"></param>
  
/// <param name="destination"></param>
  
/// <param name="credential"></param>
  
/// <returns></returns>

  private string SendRequestTo(byte[] requestBytes, Uri destination, NetworkCredential credential)
  
{
   Trace.WriteLine(
"Sending request to url:" + destination.AbsoluteUri);

   
// Build the request.
   HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(destination);
   webRequest.Method 
= "PROPFIND";
   webRequest.Accept 
= "*/*";
   webRequest.AllowAutoRedirect 
= false;
   webRequest.UserAgent 
= "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; .NET CLR v1.1.4322)";
   webRequest.CookieContainer 
= new CookieContainer();
   webRequest.ContentLength 
= requestBytes.Length;
   webRequest.ContentType 
= "text/xml";
   
// Set the credentials
   webRequest.Credentials = credential;
   
// Add cookies for this request
   webRequest.CookieContainer.Add(ccContainer.GetCookies(destination));

   
try
   
{
    
// Write the request
    Stream reqStream = webRequest.GetRequestStream();
    reqStream.Write(requestBytes,
0,requestBytes.Length);
    reqStream.Close();
    
// Get a response
    HttpWebResponse webResponse = (HttpWebResponse)webRequest.GetResponse();
    
if (webRequest.HaveResponse)
    
{
     
// Handle returned cookies
     foreach(Cookie retCookie in webResponse.Cookies)
     
{
      
bool cookieFound = false;
      
      
foreach(Cookie oldCookie in ccContainer.GetCookies(destination))
      
{
       
if (retCookie.Name.Equals(oldCookie.Name))
       
{
        oldCookie.Value 
= retCookie.Value;
        cookieFound 
= true;
       }

      }

      
if (!cookieFound)
       ccContainer.Add(retCookie);
      
     }
     
     
// Handle redirection headers
     if ((webResponse.StatusCode == HttpStatusCode.Found) || 
      (webResponse.StatusCode 
== HttpStatusCode.Redirect) ||
      (webResponse.StatusCode 
== HttpStatusCode.Moved) ||
      (webResponse.StatusCode 
== HttpStatusCode.MovedPermanently))
     
{    
      WebHeaderCollection headers 
= webResponse.Headers;
      
return SendRequestTo(requestBytes,new Uri(headers["location"]),credential); 
     }

     
// Read response
     StreamReader stream = new StreamReader(webResponse.GetResponseStream());
     
string responseString = stream.ReadToEnd();
     stream.Close();
   
     
return responseString;
    }

    
// No response
    throw new ApplicationException("No response received from host.");
   }

   
catch(WebException e)
   
{
    
// Error occured
    Trace.WriteLine("Exception occured " + e.Message);
    
throw new ApplicationException("Exception occured while sending request."+e.Message,e);
   }

   
  }

 }

}

using System;
using System.Diagnostics;
using System.Net;
using System.Xml;

namespace Hotmail
{
 
public class HotmailClient
 
{
  
Class Instances and Properties

  
Public Interface( Constructor, Connect, Disconnect, RetrieveFilledMailBox)

  
Private Interface( ParseConnectResponse, ParseFillResponse, RetrieveMailboxes, CreateNamespaceManager)

 }

}



程序进入点

private void button1_Click(object sender, System.EventArgs e)
  
{
   HotmailClient client
=new HotmailClient();
   client.Connect(
"xxxx@hotmail.com","urPassword");
  }

posted on 2005-12-05 22:17  VortexDragon(旋风龙)  阅读(1289)  评论(0编辑  收藏  举报