using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Net;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml;
namespace GetEmailAddress
{
public class AddressQQ
{
//邮箱入口定义
const string mailqq = "https://mail.qq.com/cgi-bin/loginpage";
protected static string cookieheader = string.Empty; //定义公共的 Cookie Header 变量
protected static string NextUrl = string.Empty; //定义下次访问的Url变量
CookieContainer cookieCon = new CookieContainer();
private string uName;
private string pwd;
private GetEmailAddress.Address163.Entrys en;
Regex reg;
Match m;
byte[] b;
/// <summary>
/// 构造函数
/// </summary>
/// <param name="name">邮箱名称</param>
/// <param name="pwd">邮箱密码</param>
/// <param name="type"></param>
public AddressQQ( string name, string pwd, GetEmailAddress.Address163.Entrys type )
{
this.uName = name;
this.pwd = pwd;
en = type;
//记录登陆邮箱的用户名和密码
//StringBuilder sb = new StringBuilder();
////sid=yKambzyz%2C2%2Czh_CN&firstlogin=false&starttime=1281074395894&redirecturl=&f=html&p=starking521&ept=0&delegate_url=& s=&ts=1281072399&from=&ppp=&chg=0&checkisWebLogin=15&uin=kongwei1314521&aliastype=@qq.com&pp=00000000000&verifycode=
// sb.Append( "&sid=yKambzyz%2C2%2Czh_CN" );//域
//sb.Append( "&firstlogin=false" );//语言
//sb.Append( "&redirecturl=" );//语言
//sb.Append( "&f=html" );
//sb.Append( "&p=" + pwd );//密码
//sb.Append( "&ept=0" );
//sb.Append( "&delegate_url=" );
//sb.Append( "&s=" );
//sb.Append( "&from=" );
//sb.Append( "&ppp=" );
//sb.Append( "&chg=0" ); //样式
//sb.Append( "&uin=" + name.Replace( "@qq.com", "" ) );//登录名
//sb.Append( "&aliastype=@qq.com" );
//sb.Append( "&pp=00000000000" );
//sb.Append( "&verifycode=" );
//b = Encoding.ASCII.GetBytes( sb.ToString() );
}
/// <summary>
/// 得到网页数据
/// </summary>
/// <returns>得到网页HTML数据</returns>
private string GetHtml()
{
string EntryUrl = GetEntryUrl();
return Process126mail( EntryUrl );
}
/// <summary>
/// 分析126
/// </summary>
/// <param name="EntryUrl">解析地址</param>
/// <returns></returns>
private string Process126mail( string EntryUrl )
{
try
{
#region//第一次请求登陆地址
//获取请求的内容
HttpWebRequest hwr = ( HttpWebRequest ) HttpWebRequest.Create( new Uri( EntryUrl ) );
hwr.Method = "GET";
hwr.ContentType = "application/x-www-form-urlencoded";
hwr.UserAgent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; SV1; GTB6; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)";
hwr.CookieContainer = cookieCon;
//// 发送数据
using( Stream s = hwr.GetRequestStream() )
{
s.Write( b, 0, b.Length );
}
string rb = string.Empty;
// 获取返回信息
using( HttpWebResponse wr = ( HttpWebResponse ) hwr.GetResponse() )
{
StreamReader sr = new StreamReader( wr.GetResponseStream(), Encoding.UTF8 );
rb = sr.ReadToEnd();
sr.Close();
}
//把用户名和密码添加到头部cookies
Uri nurl1 = new Uri( "https://mail.qq.com/cgi-bin/loginpage" );
foreach( System.Net.Cookie cookie in cookieCon.GetCookies( nurl1 ) )
{
cookie.Domain = ".mail.qq.com";
cookie.Expires = DateTime.Now.AddHours( 1 );
}
cookieCon.Add( cookieCon.GetCookies( nurl1 ) );
#endregion
return rb;
}
catch( Exception ex )
{
return ex.ToString() + "登录失败,请检查用户名称和密码";
}
}
//正则过滤
private static string TransCode( string str )
{
Regex r = new Regex( @"([d]{1,5})", RegexOptions.None );
StringBuilder s = new StringBuilder();
foreach( Match m in r.Matches( str ) )
{
char c = ( char ) int.Parse( m.Groups[ 1 ].Value );
s.Append( c.ToString() );
}
return s.ToString();
}
/// <summary>
/// 得到126通讯录的内容
/// </summary>
/// <returns>通讯录集合</returns>
public List<Person> getContact()
{
List<Person> ls = new List<Person>();
//读取XML数据然后进行 选择匹配筛选出来匹配的邮箱
string resHtml = Encoding.UTF8.GetString( Encoding.Convert( Encoding.UTF8, Encoding.UTF8, Encoding.UTF8.GetBytes( this.GetHtml() ) ) );
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml( resHtml );
XmlNodeList xnl = xmlDoc.SelectNodes( "/result/array/object" );
if( xnl == null || xnl.Count <= 0 )
return ls;
XmlNodeList linkNOdes = xnl[ 0 ].SelectNodes( "array/object" );
foreach( XmlNode linkNode in linkNOdes )
{
Person ps = new Person();
foreach( XmlNode xn2 in linkNode.ChildNodes )
{
//取得邮箱地址
if( xn2.Attributes[ "name" ].Value == "EMAIL;PREF" )
{
ps.Email = xn2.InnerText;
}
if( xn2.Attributes[ "name" ].Value == "FN" )
{
if( !string.IsNullOrEmpty( xn2.InnerText ) )
{
ps.Name = xn2.InnerText;
}
else
{
ps.Name = "暂无名称";
}
}
}
ls.Add( ps );
}
return ls;
}
/// <summary>
/// 枚举获请求用什么方式
/// </summary>
private enum ReqMethod
{
POST,
GET
}
/// <summary>
/// 得到请求地址
/// </summary>
/// <returns>得到请求地址</returns>
private string GetEntryUrl()
{
string EntryUrl = string.Empty;
switch( en )
{
case GetEmailAddress.Address163.Entrys.mailQQ:
EntryUrl = mailqq;
break;
default:
break;
}
return string.Format( EntryUrl, uName, pwd );
}
private AddressQQ()
{
} //封闭接口
}
}
|