Maneira correta de pesquisar na caixa de entrada do GMail para receber e-mails de aplicativos independentes
Estou tentando pesquisar na caixa de entrada do GMail as mensagens recebidas. Aqui está o que eu tenho:
import java.util.Properties;
import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.PasswordAuthentication;
import javax.mail.Session;
import javax.mail.event.MessageCountEvent;
import javax.mail.event.MessageCountListener;
import com.sun.mail.imap.IMAPFolder;
import com.sun.mail.imap.IMAPStore;
public class GmailIncomingTest {
public static void main(String[] args) {
try {
String username = "[email protected]";
String password = "mypassword";
Properties properties = new Properties();
properties.put("mail.smtp.auth", "true");
properties.put("mail.smtp.host", "smtp.gmail.com");
properties.put("mail.smtp.port", "587");
Session session = Session.getDefaultInstance(properties, new Authenticator() {
protected PasswordAuthentication getPasswordAuthentication() {
return new PasswordAuthentication(username, password);
}
});
IMAPStore store = (IMAPStore) session.getStore("imaps");
store.connect("smtp.gmail.com", username, password);
IMAPFolder inbox = (IMAPFolder) store.getFolder("inbox");
inbox.open(Folder.READ_ONLY);
inbox.addMessageCountListener(new MessageCountListener() {
@Override
public void messagesRemoved(MessageCountEvent event) {
}
@Override
public void messagesAdded(MessageCountEvent event) {
Message[] messages = event.getMessages();
for (Message message : messages) {
try {
System.out.println("Mail Subject:- " + message.getSubject());
} catch (MessagingException e) {
e.printStackTrace();
}
}
}
});
new Thread(new Runnable() {
private static final long KEEP_ALIVE_FREQ = 10000;
@Override
public void run() {
while (!Thread.interrupted()) {
try {
inbox.idle();
Thread.sleep(KEEP_ALIVE_FREQ);
} catch (InterruptedException e) {
} catch (MessagingException e) {
}
}
}
}).start();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Gostaria de saber se esta é a maneira correta de fazer isso ou se existe outra maneira melhor.