在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;
}
}
}