第六讲:使用Store查看邮件(2)
一、邮件接收程序编程实例
编程实例1:
功能:接收指定邮件账户中的电子邮件,并且打印出邮件的主题和发件人供用户浏览,由用户决定是否阅读。
public static void main(String[] args) throws Exception{
//定义连接pop3服务器的信息
String pop3Server = "pop3.163.com";
String protocol = "pop3";
String username ="XXX";
String password ="XXX";
Properties props = new Properties();
props.setProperty("mail.store.protocol", protocol);
props.setProperty("mail.pop3.host", pop3Server);
Session session = Session.getDefaultInstance(props);
//session.setDebug(true);
Store store = session.getStore(protocol);
store.connect(pop3Server,username, password); //pop3服务器登陆认证
Folder folder = store.getFolder("inbox"); //获取用户的邮件夹
folder.open(Folder.READ_WRITE); //设置对邮件账户的访问权限
Message[] msgs = folder.getMessages(); //获得邮件账户中的所有邮件
for(int i=0; i< msgs.length; i++){
String subject = msgs[i].getSubject();
String from = String.valueOf(msgs[i].getFrom()[0]);
System.out.println("第"+(i+1)+"封邮件的主题是:"+subject+"\t 发件人为:"+from);
System.out.println("你想阅读此邮件吗?(yes/no)");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String inputString = br.readLine();
if("yes".equalsIgnoreCase(inputString)){
msgs[i].writeTo(System.out); //输出邮件内容
}
}
folder.close(false); //关闭邮件夹对象,若为ture则会删除哪些标记为删除的邮件
store.close();
}
}
二、搜索邮件
JavaMail在javax.mail.search包中定义了一个用于创建搜索条件的SearchTerm类,应用程序创建SearchTerm类的实例对象后,就可以调用Folder.search(SearchTerm st)方法搜索邮件夹中符合搜索条件的所有邮件。SearchTerm是一个抽象类,JavaMail提供了22个实现子类以帮助应用程序创建不同的搜索条件,这22个类大致可以分为两大类型,如下:
1. 用于创建逻辑组合关系的类
1. 用于创建逻辑组合关系的类
AND条件(AndTerm类)
OR条件(OrTerm类)
NOT条件(NotTerm类)
Comparison条件(ComparisonTerm类)
2. 用于创建具体搜索条件的类
DATE条件(SentDateTerm类,ReceivedDateTerm类)
CONTENT条件(BodyTerm类)
HEADER条件(FromStringTerm类,RecipientStringTerm类,SubjectTerm类等)
例如:
搜索邮件中所有从"it315_test@sohu.com"或"it315_test@sina.com"发送过来的邮件,如下所示:
SearchTerm st = new OrTerm(
new FromStringTerm("it315_test@sohu.com"),
new FromStringTerm("it315_test@sohu.com")
);
Message[] msgs = folder.search(st);
搜索邮件夹中今天收到的并且是"it315_test@sina.com"这个邮箱地址发送过来的所有邮件
SearchTerm st = new AndTerm(
new FromStringTerm("it315_test@sina.com"),
new ReceivedDateTerm(ComparisonTerm.EQ , new Date())
);
Message[] msgs = folder.search(st);
ComparisonTerm类常用于日期类的比较中,它使用六个常量EQ(=)、GE(>=)、GT(>)、LE(<=)、LT(<)、NE(!=)
搜索邮件中所有从"it315_test@sohu.com"或"it315_test@sina.com"发送过来的邮件,如下所示:
SearchTerm st = new OrTerm(
new FromStringTerm("it315_test@sohu.com"),
new FromStringTerm("it315_test@sohu.com")
);
Message[] msgs = folder.search(st);
搜索邮件夹中今天收到的并且是"it315_test@sina.com"这个邮箱地址发送过来的所有邮件
SearchTerm st = new AndTerm(
new FromStringTerm("it315_test@sina.com"),
new ReceivedDateTerm(ComparisonTerm.EQ , new Date())
);
Message[] msgs = folder.search(st);
ComparisonTerm类常用于日期类的比较中,它使用六个常量EQ(=)、GE(>=)、GT(>)、LE(<=)、LT(<)、NE(!=)
编程实例2
功能:搜搜并删除符合条件的邮件
public static void main(String[] args) throws Exception {
if(args.length != 2){
System.out.println("Wrong Input Parameter");
System.exit(1);
}
String fromTerm =args[0];
String subjectTerm = args[1];
//System.out.println(args[0] + " "+args[1]);
String pop3Server = "pop3.163.com";
String protocol = "pop3";
String usernmae = "XXX";
String password ="XXX";
Properties props = new Properties();
props.setProperty("mail.pop3.host", pop3Server);
props.setProperty("mail.store.protocol", protocol);
Session session = Session.getDefaultInstance(props);
session.setDebug(true);
Store store = session.getStore(protocol);
store.connect(pop3Server, usernmae, password); //连接接收邮件服务器
Folder folder = store.getFolder("inbox");
folder.open(Folder.READ_WRITE);
//创建搜索对象
SearchTerm st = new OrTerm(
new FromStringTerm(fromTerm),
new SubjectTerm(subjectTerm)
);
Message[] msgs = folder.search(st);
System.out.println("找到"+msgs.length+"封符合搜索条件的邮件");
if(msgs.length ==0){
System.exit(1);
}
for(int i=0; i< msgs.length; i++){
String from = msgs[i].getFrom()[0].toString();
String subject = msgs[i].getSubject();
System.out.println("发件人:"+from+"; 主题:"+subject);
System.out.println("你想要删除这封邮件吗?(yes/no)");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String input = br.readLine();
if("yes".equalsIgnoreCase(input)){
msgs[i].setFlag(Flags.Flag.DELETED, true); //标记为删除
}
}
folder.close(true); //退出邮件夹后删除标记为“删除“的邮件
store.close();
}