在IM工具风靡的今天,网站获取msn,gtalk,qq等好友列表,从而得到他们的email,这多么帅的一件事情。尤其是在注册的时候,通过这种方法,让用户去邀请用户,对网站的推广,至关重要。
另外,还可以,通过模拟登录,获取各大邮箱的联系人列表,这也是非常实用的技术。在本文中,暂时只论述C#如何获取msn好友列表。
1,dotmsn组件.
DotMSN是一款独立的开源类库,它不需要和官方的MSN Messenger交互,因此不必安装MSN Messenger就可以使用DotMSN和MSN Messenger服务通信.DotMSN是C#编写的,所以.NET环境支持的语言都能够使用.DotMSN类库使用简单而且实现方便。它灵活,坚固,轻量级利于整合到任何应用系统.使用DotMSN的应用系统能实现从创建消息机器人到自定义客户端等各种不同的功能.
2,核心代码
using System;
using System.Data;
using System.Collections.Generic;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using woruhe.CommonComponents;
using woruhe.CommonComponents.Cookie;
using woruhe.CommonComponents.Email;
using woruhe.CommonComponents.Domain;
using Ohqi.Components;
using System.Text;
using DotMSN;
namespace woruhe.CommonComponents.IM
{
/// <summary>
/// 微软MSN通信类
/// </summary>
public class MSMessager : IMBase
{
/// <summary>
/// 根据输入的帐号和密码得到所有联系人邮件列表
/// </summary>
/// <param name="id">邮箱</param>
/// <param name="pw">密码</param>
/// <returns>ArrayList</returns>
public override ArrayList GetEmailListOfAllContacts(string id, string pw)
{
Messenger messenger = new Messenger();
ArrayList contactEmailList = new ArrayList();
if (messenger.Connected)
{
messenger.CloseConnection();
}
try
{
messenger.Connect(id, pw);
messenger.SynchronizeList();
int count = 0;
while (!messenger.GetListEnumerator(MSNList.ForwardList).MoveNext() && count < 5)
{
System.Threading.Thread.Sleep(2000);
count++;
}
if (!messenger.GetListEnumerator(MSNList.ForwardList).MoveNext() && count == 5)
{
throw new Exception("MSN无法连接!");
}
messenger.SetStatus(MSNStatus.Online); // 设置上线
System.Threading.Thread.Sleep(1000);
ArrayList GroupList = new ArrayList();
Hashtable Grouptable = new Hashtable();
foreach (object o in messenger.ContactGroups.Keys)
{
ContactGroup contactGroup = messenger.ContactGroups[o] as ContactGroup;
GroupList.Add(contactGroup);
Grouptable.Add("Group" + contactGroup.ID, new ArrayList());
}
foreach (Contact contact in messenger.GetListEnumerator(MSNList.ForwardList))
{
ArrayList contactList = Grouptable["Group" + contact.ContactGroup.ID] as ArrayList;
contactList.Add(contact);
}
StringBuilder ListHtml = new StringBuilder();
for (int i = 0; i < GroupList.Count; i++)
{
ContactGroup contactGroup = GroupList[i] as ContactGroup;
ArrayList contactList = Grouptable["Group" + contactGroup.ID] as ArrayList;
for (int j = 0; j < contactList.Count; j++)
{
Contact contact = contactList[j] as Contact;
contactEmailList.Add(contact.Mail);//把联系人邮件地址列表
}
}
}
catch
{
Globals.Alert("对不起!MSN无法连接,你输入可能有误。", "/My/InviteMsnFriends.aspx");
}
return contactEmailList;
}
}
}