packagebook.email;importjava.io.BufferedReader;importjava.io.BufferedWriter;importjava.io.ByteArrayOutputStream;importjava.io.File;importjava.io.FileWriter;importjava.io.IOException;importjava.io.InputStreamReader;importjava.io.Reader;importjava.io.StringReader;importjava.io.UnsupportedEncodingException;importjava.util.Date;importjavax.mail.BodyPart;importjavax.mail.Flags;importjavax.mail.Folder;importjavax.mail.Message;importjavax.mail.MessagingException;importjavax.mail.Multipart;importjavax.mail.NoSuchProviderException;importjavax.mail.Part;importjavax.mail.Session;importjavax.mail.Store;importjavax.mail.internet.InternetAddress;importjavax.mail.internet.MimeMessage;importjavax.mail.internet.MimeUtility;/*** 邮件接收器,目前支持pop3协议。
* 能够接收文本、HTML和带有附件的邮件*/publicclassMailReceiver {//收邮件的参数配置privateMailReceiverInfo receiverInfo;//与邮件服务器连接后得到的邮箱privateStore store;//收件箱privateFolder folder;//收件箱中的邮件消息privateMessage[] messages;//当前正在处理的邮件消息privateMessage currentMessage;privateString currentEmailFileName;publicMailReceiver(MailReceiverInfo receiverInfo) {this.receiverInfo=receiverInfo;
}/*** 收邮件*/publicvoidreceiveAllMail()throwsException{if(this.receiverInfo==null){thrownewException("必须提供接收邮件的参数!");
}//连接到服务器if(this.connectToServer()) {//打开收件箱if(this.openInBoxFolder()) {//获取所有邮件this.getAllMail();this.closeConnection();
}else{thrownewException("打开收件箱失败!");
}
}else{thrownewException("连接邮件服务器失败!");
}
}/*** 登陆邮件服务器*/privatebooleanconnectToServer() {//判断是否需要身份认证MyAuthenticator authenticator=null;if(this.receiverInfo.isValidate()) {//如果需要身份认证,则创建一个密码验证器authenticator=newMyAuthenticator(this.receiverInfo.getUserName(),this.receiverInfo.getPassword());
}//创建sessionSession session=Session.getInstance(this.receiverInfo
.getProperties(), authenticator);//创建store,建立连接try{this.store=session.getStore(this.receiverInfo.getProtocal());
}catch(NoSuchProviderException e) {
System.out.println("连接服务器失败!");returnfalse;
}
System.out.println("connecting");try{this.store.connect();
}catch(MessagingException e) {
System.out.println("连接服务器失败!");returnfalse;
}
System.out.println("连接服务器成功");returntrue;
}/*** 打开收件箱*/privatebooleanopenInBoxFolder() {try{this.folder=store.getFolder("INBOX");//只读folder.open(Folder.READ_ONLY);returntrue;
}catch(MessagingException e) {
System.err.println("打开收件箱失败!");
}returnfalse;
}/*** 断开与邮件服务器的连接*/privatebooleancloseConnection() {try{if(this.folder.isOpen()) {this.folder.close(true);
}this.store.close();
System.out.println("成功关闭与邮件服务器的连接!");returntrue;
}catch(Exception e) {
System.out.println("关闭和邮件服务器之间连接时出错!");
}returnfalse;
}/*** 获取messages中的所有邮件
*@throwsMessagingException*/privatevoidgetAllMail()throwsMessagingException {//从邮件文件夹获取邮件信息this.messages=this.folder.getMessages();
System.out.println("总的邮件数目:"+messages.length);
System.out.println("新邮件数目:"+this.getNewMessageCount());
System.out.println("未读邮件数目:"+this.getUnreadMessageCount());//将要下载的邮件的数量。intmailArrayLength=this.getMessageCount();
System.out.println("一共有邮件"+mailArrayLength+"封");interrorCounter=0;//邮件下载出错计数器intsuccessCounter=0;for(intindex=0; index