package org.fluxtream.core.utils;
import java.security.Provider;
import java.security.Security;
import java.util.Properties;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import org.fluxtream.core.utils.sasl.OAuth2SaslClientFactory;
import com.sun.mail.imap.IMAPSSLStore;
public class MailUtils {
public static Store getGmailImapStore(String emailuser, String emailpassword)
throws MessagingException {
Session session;
String emailserver = "imap.gmail.com";
String emailprovider = "imaps";
Store store = null;
Properties props = System.getProperties();
props.setProperty("mail.pop3s.rsetbeforequit", "true");
props.setProperty("mail.pop3.rsetbeforequit", "true");
props.setProperty("mail.imaps.port", "993");
props.setProperty("mail.imaps.host", "imap.gmail.com");
props.setProperty("mail.store.protocol", "imaps");
props.setProperty("mail.imap.socketFactory.class", "javax.net.ssl.SSLSocketFactory");
props.setProperty("mail.imap.socketFactory.fallback", "false");
session = Session.getInstance(props, null);
store = session.getStore(emailprovider);
store.connect(emailserver, emailuser, emailpassword);
return store;
}
public static final class OAuth2Provider extends Provider {
private static final long serialVersionUID = 1L;
public OAuth2Provider() {
super("Google OAuth2 Provider", 1.0,
"Provides the XOAUTH2 SASL Mechanism");
put("SaslClientFactory.XOAUTH2",
"org.fluxtream.utils.sasl.OAuth2SaslClientFactory");
}
}
static {
Security.addProvider(new OAuth2Provider());
}
public static Store getGmailImapStoreViaSASL(final String emailAddress, final String accessToken) throws MessagingException{
Properties props = new Properties();
props.put("mail.imaps.sasl.enable", "true");
props.put("mail.imaps.sasl.mechanisms", "XOAUTH2");
props.put(OAuth2SaslClientFactory.OAUTH_TOKEN_PROP, accessToken);
Session session = Session.getInstance(props);
IMAPSSLStore store = new IMAPSSLStore(session, null);
store.connect("imap.gmail.com", 993, emailAddress, "");
return store;
}
}