segunda-feira, 30 de novembro de 2009

Enviando Mensagem Instatânea (MSN) com JAVA

Depois de sofrer bastante para fazer meu programa funcionar, finalmente consegui! E é realmente simples mandar uma mensagem para o MSN de alguém usando Java...

Primeiro, baixe a lib Java MSN Messenger Library (JML) em http://jml.blathersource.org/

Você precisará criar 2 classes.
Primeiro, crie a classe MSNListener, desse jeito:


import net.sf.jml.MsnContact;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnSwitchboard;
import net.sf.jml.event.MsnAdapter;
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;

public class MsnListener extends MsnAdapter {

public void exceptionCaught(
MsnMessenger messenger,
Throwable throwable) {
}

public void loginCompleted(
MsnMessenger messenger) {
}

public void logout(
MsnMessenger messenger) {
}

public void instantMessageReceived(
MsnSwitchboard switchboard,
MsnInstantMessage message,
MsnContact friend) {
switchboard.sendMessage(message, false);
}

public void systemMessageReceived(
MsnMessenger messenger,
MsnSystemMessage message) {
}

public void controlMessageReceived(
MsnSwitchboard switchboard,
MsnControlMessage message,
MsnContact contact) {
switchboard.sendMessage(message, false);
}

public void datacastMessageReceived(
MsnSwitchboard switchboard,
MsnDatacastMessage message,
MsnContact friend) {
switchboard.sendMessage(message, false);
}

public void unknownMessageReceived(
MsnSwitchboard switchboard,
MsnUnknownMessage message,
MsnContact friend) {
}

public void contactListInitCompleted(
MsnMessenger messenger) {
}

public void contactListSyncCompleted(
MsnMessenger messenger) {
}

public void contactStatusChanged(
MsnMessenger messenger,
MsnContact friend) {
}

public void ownerStatusChanged(
MsnMessenger messenger) {
}

public void contactAddedMe(
MsnMessenger messenger,
MsnContact friend) {
}

public void contactRemovedMe(
MsnMessenger messenger,
MsnContact friend) {
}

public void switchboardClosed(
MsnSwitchboard switchboard) {
}

public void switchboardStarted(
MsnSwitchboard switchboard) {
}

public void contactJoinSwitchboard(
MsnSwitchboard switchboard,
MsnContact friend) {
}

public void contactLeaveSwitchboard(
MsnSwitchboard switchboard,
MsnContact friend) {
}

}


Agora, crie a classe MSNSender, desse jeito:


import java.util.Properties;
import net.sf.jml.Email;
import net.sf.jml.MsnMessenger;
import net.sf.jml.MsnProtocol;
import net.sf.jml.MsnUserStatus;
import net.sf.jml.impl.MsnMessengerFactory;

public class MSNSender {

private String username;
private String password;
private String proxyHost;
private String proxyPort;

public MSNSender(
String username,
String password,
String proxyHost,
String proxyPort) {

this.username = username;
this.password = password;
this.proxyHost = proxyHost;
this.proxyPort = proxyPort;

}

public void send(
String msg,
String to) {

if (proxyHost != null && proxyHost.trim().length() > 0) {
Properties systemSettings = System.getProperties();
systemSettings.put("https.proxySet", "true");
systemSettings.put("https.proxyHost", proxyHost);
systemSettings.put("https.proxyPort", proxyPort);
systemSettings.put("http.proxySet", "true");
systemSettings.put("http.proxyHost", proxyHost);
systemSettings.put("http.proxyPort", proxyPort);
}

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

// Tempo de espera para completar o login
try {
Thread.sleep(16000);
} catch (InterruptedException e) {
e.printStackTrace();
}

messenger.sendText(Email.parseStr(to), msg);
messenger.logout();
}

public static void main(String args[]){
MSNSender sender = new MSNSender("rafael@hotmail.com","senha","","");
sender.send("Oi! Tudo bem?", "maria@hotmail.com");
}
}