请问校内网,开心网的“msn好友邀请”功能,是怎么实现的?

就是你输入msn,和密码,网站就会给你所有的msn好友发邮件,发消息,邀请加入。
请问这是怎么做的
[b]问题补充:[/b]
PAN_JAVA你可以说的详细点么,那个接口我也没找到啊InviteService
[b]问题补充:[/b]
这么说不跳转的,都是有可能被记录id和密码的了吧?现在什么校内,开心,都是不跳转的吧,都有可能被记录id和密码

直接用那个韩国人写的jar实际上是模拟msn客户端,如果你登录了,用户在线的msn会挂掉,而且你可以顺便把用户的口令记下来,当然如果用户不介意口令的安全你也可以用这种方法

真正的方法是使用live的contact api读取msn好友,用户会跳转到live登录页面,登录后再跳转回你的网站,你根据返回的secret key去live验证,如果通过了就可以获得xml格式的好友列表,含好友名和email

你可以看下面的例子:
http://www.365jizhang.com/api/liveInvite.do
(需要先登录网站,然后点右上角的邀请好友)

具体参考dev.live.com

就是用邮件的协议和msn的协议

发邮件自然就是比如java的话,就用javamail来实现

发消息,邀请加入之类就应该是要实现msn协议的包来做

需要使用http://im.live.cn/imme/这个,将代码嵌套在你的网页中

MSN的消息协议是公开的,应该有类似获取用户列表之类的功能.请LZ自己Google下MSN协议.
Java方面貌似以前有个JMSN的开源项目,不过是韩国人做的,文档全韩文.LZ有兴趣可自行研究.其他的开源包应该也有,不过暂无时间为LZ一一找来.见谅,希望有帮助.

[url]http://sourceforge.net/projects/java-jml/files/java-jml/jml-1.0b3-full.jar/download[/url]

下载jml-1.0b3-full.jar

[code="java"]public class MsnInviteService implements InviteService {

private static Logger logger = Logger.getLogger(MsnInviteService.class);

private String email;

private String password;

private static MsnMessenger messenger;

public MsnInviteService(String email, String password) {
    this.email = email;
    this.password = password;
    start();
}

public void start() {
    messenger = MsnMessengerFactory.createMsnMessenger(email, password);
    messenger
            .setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP11 });
    messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);
    messenger.setLogIncoming(false);
    messenger.setLogOutgoing(false);
    messenger.login();
    try {
        Thread.sleep(10000);
    } catch (InterruptedException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public static void main(String[] args) throws Exception {
    InviteService a = new MsnInviteService("**************", "********");

    /*//List<InviteFriend> list = a.getInviteFriendlList();
    for (InviteFriend ifd : list) {
        System.out.println(ifd.getName());
    }*/
 }

public List<InviteFriend> getInviteFriendlList(int userId) {
    // TODO Auto-generated method stub
    List<InviteFriend> list = new ArrayList<InviteFriend>();
    MsnContact[] cons = messenger.getContactList().getContacts();
    for (MsnContact con : cons) {
        System.out.println(con.getDisplayName());
                       System.out.println(con.getEmail().toString());
    }
    messenger.logout();
    InviteManageService.getInstance().saveVipuserFriendList(userId, InviteService.INVITE_MSN, list);
    return list;

}

}[/code]

jar 包发给你了,我现在项目也正好需要这个功能.

InviteService 是哪里的接口?我怎么在jar包里面找不到

是你自己写的吗?

InviteService 是我自己写的一个接口

[color=red]implements InviteService[/color] 不要这个

[code="java"]package net.sf.jml.example;

import net.sf.jml.MsnContact;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnProtocol;
import net.sf.jml.MsnSwitchboard;
import net.sf.jml.MsnUserStatus;
import net.sf.jml.event.MsnAdapter;
import net.sf.jml.event.MsnContactListAdapter;
import net.sf.jml.impl.MsnContactImpl;
import net.sf.jml.impl.MsnMessengerFactory;
import net.sf.jml.message.MsnControlMessage;
import net.sf.jml.message.MsnDatacastMessage;
import net.sf.jml.message.MsnInstantMessage;
import net.sf.jml.message.MsnSystemMessage;
import net.sf.jml.message.MsnUnknownMessage;

import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**

  • @author Roger Chen
    */
    public class SimpleMsn
    {

    private static final Log log = LogFactory.getLog(SimpleMsn.class);

    private String email;

    private String password;

    private MsnMessenger messenger;

    public SimpleMsn(String email, String password)
    {
    this.email = email;
    this.password = password;
    }

    public void start()
    {
    messenger = MsnMessengerFactory.createMsnMessenger(email,
    password);
    messenger
    .setSupportedProtocol(new MsnProtocol[] { MsnProtocol.MSNP11 });
    messenger.getOwner().setInitStatus(MsnUserStatus.ONLINE);
    messenger.setLogIncoming(true);
    messenger.setLogOutgoing(true);
    messenger.addListener(new MsnListener());
    messenger.login();

    messenger.addContactListListener(new MsnContactListAdapter()
    {
        public void contactStatusChanged(MsnMessenger msn, MsnContact con)
        {
            System.out.println(con.getDisplayName());
            System.out.println(con.getPersonalMessage());
            System.out.println(((MsnContactImpl) con).getCurrentMedia());
        }
    
        public void contactListInitCompleted(MsnMessenger messenger)
        {
            listContacts();
        }
    
    });
    
    try
    {
        Thread.sleep(10000);
    } catch (InterruptedException e)
    {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    messenger.logout();
    messenger.login();
    

// messenger.getOwner().setDisplayName("Blah");
// messenger.getOwner().getDisplayName();
}

private void listContacts()
{
    MsnContact[] cons = messenger.getContactList().getContacts();
    for (MsnContact con : cons) {
        System.out.println(con.getDisplayName());
        System.out.println(con.getEmail());
        System.out.println(con.getStatus());
        System.out.println(con.getPersonalMessage());
    }
}

public static void main(String[] args) throws Exception
{
    new SimpleMsn("email", "password").start();
}

private static class MsnListener extends MsnAdapter
{

    public void exceptionCaught(MsnMessenger messenger, Throwable throwable)
    {
        log.error(messenger + throwable.toString(), throwable);
    }

    public void loginCompleted(MsnMessenger messenger)
    {
        log.info(messenger + " login complete ");
    }

    public void logout(MsnMessenger messenger)
    {
        log.info(messenger + " logout");
    }

    public void instantMessageReceived(MsnSwitchboard switchboard,
            MsnInstantMessage message, MsnContact friend)
    {
        log.info(switchboard + " recv instant message " + message);
        switchboard.sendMessage(message, false);
    }

    public void systemMessageReceived(MsnMessenger messenger,
            MsnSystemMessage message)
    {
        log.info(messenger + " recv system message " + message);
    }

    public void controlMessageReceived(MsnSwitchboard switchboard,
            MsnControlMessage message, MsnContact contact)
    {
        log.info(switchboard + " recv control message from "
                + contact.getEmail());
        switchboard.sendMessage(message, false);
    }

    public void datacastMessageReceived(MsnSwitchboard switchboard,
            MsnDatacastMessage message, MsnContact friend)
    {
        log.info(switchboard + " recv datacast message " + message);

        switchboard.sendMessage(message, false);
    }

    public void unknownMessageReceived(MsnSwitchboard switchboard,
            MsnUnknownMessage message, MsnContact friend)
    {
        log.info(switchboard + " recv unknown message " + message);
    }

    public void contactListInitCompleted(MsnMessenger messenger)
    {
        log.info(messenger + " contact list init completeted");
    }

    public void contactListSyncCompleted(MsnMessenger messenger)
    {
        log.info(messenger + " contact list sync completed");
    }

    public void contactStatusChanged(MsnMessenger messenger,
            MsnContact friend)
    {
        log.info(messenger + " friend " + friend.getEmail()
                + " status changed from " + friend.getOldStatus() + " to "
                + friend.getStatus());
    }

    public void ownerStatusChanged(MsnMessenger messenger)
    {
        log.info(messenger + " status changed from "
                + messenger.getOwner().getOldStatus() + " to "
                + messenger.getOwner().getStatus());
    }

    public void contactAddedMe(MsnMessenger messenger, MsnContact friend)
    {
        log.info(friend.getEmail() + " add " + messenger);
    }

    public void contactRemovedMe(MsnMessenger messenger, MsnContact friend)
    {
        log.info(friend.getEmail() + " remove " + messenger);
    }

    public void switchboardClosed(MsnSwitchboard switchboard)
    {
        log.info(switchboard + " closed");
    }

    public void switchboardStarted(MsnSwitchboard switchboard)
    {
        log.info(switchboard + " started");
    }

    public void contactJoinSwitchboard(MsnSwitchboard switchboard,
            MsnContact friend)
    {
        log.info(friend.getEmail() + " join " + switchboard);
    }

    public void contactLeaveSwitchboard(MsnSwitchboard switchboard,
            MsnContact friend)
    {
        log.info(friend.getEmail() + " leave " + switchboard);
    }

}

}[/code]

自己带的例子

[color=red]这么说不跳转的,都是有可能被记录id和密码的了吧?现在什么校内,开心,都是不跳转的吧,都有可能被记录id和密码 [/color]

有可能.这个不好说.