package com.what21.network.mail;
import java.util.Properties;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.NoSuchProviderException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.search.SearchTerm;
public class EmailSearcher {
/**
* Searches for e-mail messages containing the specified keyword in
* Subject field.
* @param host
* @param port
* @param userName
* @param password
* @param keyword
*/
public void searchEmail(String host, String port, String userName,
String password, final String keyword) {
Properties properties = new Properties();
// Email服务器配置
properties.put("mail.imap.host", host);
properties.put("mail.imap.port", port);
// SSL设置
properties.setProperty("mail.imap.socketFactory.class",
"javax.net.ssl.SSLSocketFactory");
properties.setProperty("mail.imap.socketFactory.fallback", "false");
properties.setProperty("mail.imap.socketFactory.port",
String.valueOf(port));
Session session = Session.getDefaultInstance(properties);
try {
// 连接到消息Store
Store store = session.getStore("imap");
store.connect(userName, password);
// 打开 inbox folder
Folder folderInbox = store.getFolder("INBOX");
folderInbox.open(Folder.READ_ONLY);
// 创建一个搜索
SearchTerm searchCondition = new SearchTerm() {
@Override
public boolean match(Message message) {
try {
if (message.getSubject().contains(keyword)) {
return true;
}
} catch (MessagingException ex) {
ex.printStackTrace();
}
return false;
}
};
// 通过folder执行搜索
Message[] foundMessages = folderInbox.search(searchCondition);
for (int i = 0; i < foundMessages.length; i++) {
Message message = foundMessages[i];
String subject = message.getSubject();
System.out.println("Found message #" + i + ": " + subject);
}
// 关闭连接
folderInbox.close(false);
store.close();
} catch (NoSuchProviderException ex) {
System.out.println("No provider.");
ex.printStackTrace();
} catch (MessagingException ex) {
System.out.println("不能连接到消息 store.");
ex.printStackTrace();
}
}
/**
* Test this program with a Gmail's account
*/
public static void main(String[] args) {
String host = "imap.gmail.com";
String port = "993";
String userName = "your_email";
String password = "your_password";
EmailSearcher searcher = new EmailSearcher();
String keyword = "JavaMail";
searcher.searchEmail(host, port, userName, password, keyword);
}
}