⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 maildirfolder.java

📁 mail sent and revesive system jsp+mysql
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * MaildirFolder.java
 * Copyright (C) 1999 fengyun <fengyun@gbsource.net>
 */
package fengyun.Fastmail.Maildir;

import java.io.*;
import java.net.*;
import java.util.*;
import java.util.zip.*;
import javax.mail.*;
import javax.mail.event.*;
import javax.mail.internet.*;

/**
 * Maildir形式的邮件夹
 * @author fengyun
 * @version 1.01
 */
public class MaildirFolder extends Folder {
	
	protected MaildirFolderSummary summary = null;								//邮夹摘要
	protected Vector msgsummarys = new Vector();										//消息摘要集
	protected Vector messages = new Vector();											//消息集合

	/**
	 * 构造MaildirFolder
	 * @param store 邮件的存储对象
	 * @param dirname 邮件夹名
	 */
	protected MaildirFolder(Store store,String name) throws MessagingException{
		super(store);
		String fulldir = ((MaildirStore)store).getMaildir() + File.separator + name;
		summary = new MaildirFolderSummary(new File(fulldir));
	}
	protected MaildirFolder(Store store,MaildirFolderSummary summary) throws MessagingException{
		super(store);
		this.summary = summary;
	}
	/**
	 * 返回摘要
	 * @return MaildirFolderSummary 邮件夹摘要
	 */
	public MaildirFolderSummary getSummary() {
		return summary;
	}
	/**
	 * 返回邮件夹类型
	 * @return int 邮件夹类型
	 */
    public int getType() {
		return summary.getType();
	}
	/**
	 * 设置邮件夹类型
	 * @param type 邮件夹类型
	 * @return void 空
	 */
	public void setType(int type) {
		summary.setType(type);
	}
	/**
	 * 返回邮件夹名
	 * @return String 邮件夹名称
	 */
	public String getName() {
		return summary.getName();
	}
	/**
	 * 返回邮件夹大小
	 * @return long 邮件夹大小
	 */
	public long getSize() {
		return summary.getSize();
	}
	/**
	 * 返回邮件夹全名
	 * @return String 邮件夹全名
	 */
	public String getFullName() {
		return summary.getFullName();
	}
	/**
	 * 邮件夹拥有消息总数
	 * @return int 消息总数
	 */
	public int getMessageCount() {
		return summary.getMessageCount();
	}
	/**
	 * 返回新消息数
	 * @return int 新消息总数
	 */
	public int getNewMessageCount() {
		return summary.getNewMessageCount();
	}
	/**
	 * 邮件夹是否拥有新消息
	 * @return boolean 是否有新消息
	 */
	public boolean hasNewMessages() {
		return summary.getNewMessageCount() > 0;
	}
	/**
	 * 将消息数组插入文件夹
	 * @param m 消息数组
	 */
    public synchronized void appendMessages(Message [] m) throws MessagingException{
		
		if (m == null || m.length == 0) throw new MessagingException("Error Message List");
		
		if (!isOpen()) throw new MessagingException("Folder is not Opened");
		
		int j=0;
		
		for (int i=0; i<m.length;i++) {
			for (j=0; j< summary.getMessageCount() && ((MaildirMessageSummary)msgsummarys.get(j)).getReceiveTime()>((MaildirMessage)m[i]).getReceiveTime();j++); //查找合适位置
			MaildirMessageSummary mms = ((MaildirMessage)m[i]).summary;
			msgsummarys.add(j,mms);
			if (j < messages.size()) { //直接插入
				messages.add(j,m[i]);
			}
			summary.incMessageCount();
			if (mms.isNewMessage()) summary.incNewMessageCount();
			//Debug
			if (((MaildirStore)store).getSession().getDebug())
				System.err.println("DEBUG: appendMessage:" + mms.getMessageID());
		}
	}
	/**
	 * 插入一个消息
	 * @param m 消息
	 */
    public void appendMessage(Message m) throws MessagingException {
		if (m == null || !(m instanceof MaildirMessage)) throw new MessagingException("Error Message");
		Message[] msglist = new Message[1];
		msglist[0] = m;
		appendMessages(msglist);
    }
	/**
	 * 邮夹是否存在
	 * @return boolean 是否存在
	 */
	public boolean exists() throws MessagingException {
		return summary.exists();
	}
	/**
	 * 打开邮件夹
	 * @param Type 打开类型
	 */
	public void open(int Type) throws MessagingException {
		if (((MaildirStore)store).getSession().getDebug())
			System.err.println("DEBUG: Maildir: opening " + getFullName());
		if (!exists())
			throw new MessagingException("The Folder Format Error or Folder is not exists.");
		
		summary.Open();
		//对消息列表,取得消息摘要
		listMessageSummarys();
		
		//列邮件夹子目录
//		if (Type == MaildirFolderSummary.HOLDS_FOLDERS) listFolderSummarys();
		notifyConnectionListeners(ConnectionEvent.OPENED);
		//Debug
		if (((MaildirStore)store).getSession().getDebug())
			System.err.println("DEBUG: open:" + this.getName());
	}
	/**
	 * 对Folder列表
	 * 返回下一级子邮件夹
	 * @return Folder[] 子邮件夹列表
	 */
	public Folder[] list() throws MessagingException {
		if (summary.getType() != MaildirFolderSummary.HOLDS_FOLDERS)
			throw new MessagingException("The Folder can't hold Sub Folder");
		
		String [] list = summary.list(new MaildirFilenameFilter('/'));				//所有目录文件
		if (list != null && list.length >0) {
			Folder[] folders = new Folder[list.length];			
			for(int i = 0;i<list.length;i++) {
				folders[i] = store.getFolder(list[i]);
			}
			return folders;
		}
		return null;
	}
	/**
	 * 根据要求列邮件夹
	 * 返回下一级邮件夹
	 * @param pattern 无效参数
	 * @return Folder[] 与 list() 的返回一样
	 */
	public Folder[] list(String pattern) throws MessagingException {
		return list();
	}
	/**
	 * 返回子邮件夹
	 * @param foldername 子邮件夹名称
	 * @return Folder 对应的邮件夹
	 */
	public Folder getFolder(String foldername) throws MessagingException {
		String fullname = getName() + getSeparator() + foldername;
		return store.getFolder(fullname);
	}
	/**
	 * 对Folder列表
	 * 得到所有消息摘要
	 */
	public void listMessageSummarys() throws MessagingException{
		if (isOpen()) {
			String[] list = summary.list(new MaildirFilenameFilter('*'));
			if (list == null) return;
			summary.setMessageCount(list.length);
			summary.setNewMessageCount(0);
			Vector mess = new Vector();
			for(int i=0;i< getMessageCount(); i++) {
				try {
					int cur = list[i].indexOf(".");
					long ReceiveTime = Long.valueOf(list[i].substring(0,cur)).longValue() ;
					char Flag = list[i].charAt(cur+1);
					File file = new File(getFullName() + getSeparator() + list[i],"r");
					long Size = file.length();
					MaildirMessageSummary mms = new MaildirMessageSummary(list[i],ReceiveTime,Flag,Size);
					mess.add(mms);
				}
				catch(Exception e) {
					System.out.println("Can't get MessageSummary" + list[i] + ':' +e.getMessage());
				}
			}
			msgsummarys.removeAllElements();
			//排序
			while(!mess.isEmpty()) {
				int index=0;
				for(int i=0 ; i < mess.size(); i++) {
					MaildirMessageSummary  mms = (MaildirMessageSummary)mess.get(index);
					if (mms.getReceiveTime() < ((MaildirMessageSummary)mess.get(i)).getReceiveTime()) index = i;
				}
				MaildirMessageSummary  mms = (MaildirMessageSummary)mess.get(index);
				if (mms.isNewMessage()) summary.incNewMessageCount();
				msgsummarys.addElement(mms);
				mess.remove(index);
			}
			mess = null;
		}
	}
	/**
	 * 关闭文件夹
	 * @param b 是否清空(此Folder不需要)
	 */
	public void close(boolean b) throws MessagingException {
		if (isOpen()) {
			summary.Close();
			//回收内存
			msgsummarys.removeAllElements();
			msgsummarys = null;
			notifyConnectionListeners(ConnectionEvent.CLOSED);
		}
		if (((MaildirStore)store).getSession().getDebug())
			System.err.println("DEBUG: Maildir: closing " + getFullName());
	}
	/**
	 * 是否存在消息摘要
	 * @param msgname 消息名称
	 * @return int 消息摘要所在位置
	 */
	public int hasMessageSummary(String msgname) {
		for(int i = 0 ;i <msgsummarys.size(); i++ ) {
			if (msgname.equals(((MaildirMessageSummary)msgsummarys.get(i)).getMessageID())) return i;
		}
		return -1;
	}
	/**
	 * 是否存在消息
	 * @param msgname 消息名称
	 * @return 消息所在位置
	 */
	public int hasMessage(String msgname) {
		for(int i = 0 ;i < messages.size(); i++ ) {
			if (msgname.equals(((MaildirMessage)messages.get(i)).summary.getMessageID())) return i;
		}
		return -1;
	}
	/**
	 * 删除消息
	 * @param msgnum 消息号
	 */
	public void deleteMessages(String msgname) throws MessagingException {
		if (msgname == null) throw new MessagingException("Error Message Name");
		
		String[] msglist = { msgname };
		deleteMessages(msglist);
	}
	/**
	 * 删除消息号数组内的消息
	 * @param msgnum 消息号数组

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -