今天遇到这么个需求:邮件群发的功能,需要把邮件发给MSN上的所有好友,这就要求必须能通过程序取得当前MSN用户的所有好友列表。一开始只是在别的网站上看到类似的功能,google了一通发现一个韩国的开源包JMSN提供MSN的所有功能,下载请点击 http://sourceforge.net/project/showfiles.php?group_id=47932;点击下载msnm-lib,在网上搜了段代码,修改了一下,现在贴到这里!
具体代码实现如下所示:
import java.util.Iterator;
import rath.msnm.BuddyGroup;
import rath.msnm.BuddyList;
import rath.msnm.MSNMessenger;
import rath.msnm.SwitchboardSession;
import rath.msnm.UserStatus;
import rath.msnm.entity.MsnFriend;
import rath.msnm.event.MsnAdapter;
import rath.msnm.msg.MimeMessage;
/**
*
* @time: Apr 28, 2009 1:29:35 PM
* @author: 聂靖宇
* @QQ: 6241899
* @MSN: [email protected]
* @Email: [email protected]
* @Description: Java读取MSN好友列表
*/
public class MSNDaemon extends Thread {
private static MSNMessenger msn;
/**
* @param args
*/
public static void main(String[] args) {
msn = new MSNMessenger("[email protected]", "12345678");
msn.setInitialStatus(UserStatus.ONLINE);
msn.addMsnListener(new MSNAdapter(msn));
msn.login();
System.out.println("Waiting for the response....");
Runtime.getRuntime().addShutdownHook(new MSNDaemon());
}
/**
* 用户中止程序执行
*/
public void run() {
msn.logout();
System.out.println("MSN Logout OK");
}
}
/**
* MSN消息事件处理类
*
*/
class MSNAdapter extends MsnAdapter {
MSNMessenger messenger;
public MSNAdapter(MSNMessenger messenger) {
this.messenger = messenger;
}
/**
* 某人正在输入信息
*/
public void progressTyping(SwitchboardSession ss, MsnFriend friend,
String typingUser) {
System.out.println(friend.getLoginName() + "正在输入信息...");
}
/**
* 收到消息的时候执行该方法
*/
public void instantMessageReceived(SwitchboardSession ss, MsnFriend friend,MimeMessage mime) {
System.out.print("接收到消息:" + friend.getFriendlyName() + "->");
System.out.println(mime.getMessage());
try {
// 发送相同的回复信息给发送者
messenger.sendMessage(friend.getLoginName(), mime);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 登录成功后执行该方法
*/
public void loginComplete(MsnFriend own) {
System.out.println(own.getLoginName() + " Login OK");
BuddyGroup group = messenger.getBuddyGroup();
BuddyList buddyList = group.getAllowList();
System.out.println("begin");
for (Iterator it = buddyList.iterator(); it.hasNext();) {
MsnFriend friend = (MsnFriend) it.next();
System.out.println("昵称:"+friend.getFriendlyName() + ", "
+"MSN:"+ friend.getLoginName());
}
}
/**
* 登录失败后执行该方法
*/
public void loginError(String header) {
System.out.println("Login Failed: " + header);
}
/**
* 好友离线时执行该方法
*/
public void userOffline(String loginName) {
System.out.println("USER " + loginName + " Logout.");
}
/**
* 好友上线时执行该方法
*/
public void userOnline(MsnFriend friend) {
System.out.println("USER " + friend.getFriendlyName() +
" Login.");
}
/**
* 有人加我为好友时执行
*/
public void whoAddedMe(MsnFriend friend) {
System.out.println("USER " + friend.getLoginName() + " Addme.");
try {
messenger.addFriend(friend.getLoginName());
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* 输出结果
*/
Waiting for the response....
[email protected] Login OK
好友列表开始......
昵称:石头, MSN:[email protected]
昵称:木头, MSN:[email protected]
USER test Login.