1、主要代码:

/** *//**
* 搜索邮件
*/

public static void search(String subject, String from, boolean or) throws Exception
{
Session session = Session.getDefaultInstance(System.getProperties(), null);
// session.setDebug(true);
Store store = session.getStore(new URLName("imap://test:test@127.0.0.1"));
store.connect();
Folder folder = store.getDefaultFolder();
// 在收件箱中搜索
folder = folder.getFolder("INBOX");
folder.open(Folder.READ_ONLY);
List<SearchTerm> terms = new ArrayList<SearchTerm>();
// 按主题查询
terms.add(new SubjectTerm(subject));
// 按发件人查询
terms.add(new FromStringTerm(from));
// 一个小时内的邮件(我本地的Megic Winmail邮件服务器查不到内容)
// long time = System.currentTimeMillis();
// SentDateTerm dateTerm = new SentDateTerm(ComparisonTerm.GE, new Date(
// time - 60 * 60 * 1000));
// terms.add(dateTerm);
SearchTerm arrays[] = new SearchTerm[terms.size()];
terms.toArray(arrays);
SearchTerm term = or ? new OrTerm(arrays) : new AndTerm(arrays);
Message[] msgs = folder.search(term);
System.out.println("FOUND " + msgs.length + " MESSAGES");

for (int i = 0; i < msgs.length; i++)
{
System.out.println("--------------------------");
System.out.println("MESSAGE #" + (i + 1) + ":");
dumpEnvelope(msgs[i]);
}
}


/** *//**
* 打印邮件的内容
*
* @param m
* @throws Exception
*/

public static void dumpEnvelope(Message m) throws Exception
{
Address[] a;

if ((a = m.getFrom()) != null)
{
for (int j = 0; j < a.length; j++)
System.out.println("FROM: " + a[j].toString());
}

if ((a = m.getRecipients(Message.RecipientType.TO)) != null)
{

for (int j = 0; j < a.length; j++)
{
System.out.println("TO: " + a[j].toString());
}
}
System.out.println("SUBJECT: " + m.getSubject());
Date d = m.getSentDate();
System.out.println("SendDate: " + (d != null ? d.toString() : "UNKNOWN"));
}


public static void main(String[] args)
{

try
{
search("subject", "test2@test.com", false);
System.out.println("\n");
search("Fw: test", "test2@test.com", false);
System.out.println("\n");
search("null", "test2@test.com", true);

} catch (Exception e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
2、测试输出:
FOUND 0 MESSAGES


FOUND 1 MESSAGES
--------------------------
MESSAGE #1:
FROM: test2 <test2@test.com>
TO: test <test@test.com>
SUBJECT: Fw: test
SendDate: Tue Apr 21 20:38:23 CST 2009


FOUND 2 MESSAGES
--------------------------
MESSAGE #1:
FROM: test2 <test2@test.com>
TO: test <test@test.com>
SUBJECT: 测试邮件
SendDate: Mon Apr 20 21:42:53 CST 2009
--------------------------
MESSAGE #2:
FROM: test2 <test2@test.com>
TO: test <test@test.com>
SUBJECT: Fw: test
SendDate: Tue Apr 21 20:38:23 CST 2009

3、相关说明:
如果采用debug模式的话,可以看到调用和搜索串之间的对应关系:
第一次:SEARCH SUBJECT subject FROM test2@test.com ALL
第二次:SEARCH SUBJECT "Fw: test" FROM test2@test.com ALL
第三次:SEARCH OR SUBJECT null FROM test2@test.com ALL