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

📄 pop3store.java

📁 mywork是rcp开发的很好的例子
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
				client.setPassword(password);
				//延迟连接
//				client.connect();
			}
			// MessageReceiver ꆼꆼꆼꆼꆼꆼ.
			if (offlineMode) {
				receiver = new OfflineMessageReceiver();
			} else if (receiveImmediatery) {
				receiver = new DefaultMessageReceiver(client);
			} else {
				receiver = new BackgroundMessageReceiver(new DefaultMessageReceiver(client));
				((BackgroundMessageReceiver) receiver).start();
			}
			return true;
		} finally {
			try {
				if (client != null) {
					client.disconnect();			// ꆼꆼꆼꆼꆼꆼꆼ.
				}
			} catch (IOException ioe) {
				debugOut("POP3Store.protocolConnect():" + ioe);
				ioe.printStackTrace();
			}
		}
	}

	/**
	 * ꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @throws MessagingException	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized void close() throws MessagingException {
		try {
			if (receiver != null) {
				if (receiver instanceof BackgroundMessageReceiver) {
					((BackgroundMessageReceiver) receiver).stopReceiving();
				}
				receiver = null;
			}
			timerThread = null;	// ꆼꆼꆼꆼꆼꆼꆼꆼ. ꆼꆼꆼꆼꆼꆼꆼ POP3Folder.isConnected() == false ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
			MessageIndex.saveAll();
		} catch (IOException ioe) {
			ioe.printStackTrace();
		} finally {
			super.close();
			debugOut("POP3Store.close():closed.");
		}
	}

	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼPOP3DefaultFolder ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼ POP3DefaultFolderꆼꆼꆼꆼꆼꆼꆼ.
	 * @throws MessagingException	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public synchronized Folder getDefaultFolder() throws MessagingException {
		return getFolder("");
	}

	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * POP3Store ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * JavaMailꆼꆼꆼꆼꆼꆼꆼFolder ꆼꆼꆼꆼꆼꆼꆼStoreꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ Folder ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	name	ꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ."INBOX" ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *                  POP3Storeꆼꆼꆼ"" ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @return		ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	javax.mail.MessagingException	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	java.lang.IllegalStateException	ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public Folder getFolder(String name) throws MessagingException {
		if (! isConnected()) {
			throw new IllegalStateException("Not connected");
		}
		if (name.startsWith("/")) {
			name = name.substring(1);
		}
		if (name.equalsIgnoreCase(INBOX_NAME)) {
			name = INBOX_NAME;
		}
		POP3Folder folder = null;
		synchronized (masterFolders) {
			POP3Folder masterfolder = null;
			
			Enumeration e = masterFolders.keys();	
			while (e.hasMoreElements()) { // ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
				String mastername = (String) e.nextElement();
				if (name.equalsIgnoreCase(mastername)) {
					masterfolder = (POP3Folder) masterFolders.get(mastername);
					name = mastername;	// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
				}
			}
			if (name.equals("")) {
				folder = new POP3DefaultFolder(this);
			} else {
				folder = new POP3Folder(this, name);
			}
			if (masterfolder == null) {
				masterfolder = folder;
				masterFolders.put(name, masterfolder);
			}	
		}
		return folder;
	}

	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼgetFolder(url.getFile()) ꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	url	ꆼꆼꆼꆼꆼꆼꆼ.
	 * @exception	javax.mail.MessagingException.
	 * @exception	java.lang.IllegalStateException	ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	public Folder getFolder(URLName url) throws MessagingException {
		return getFolder(url.getFile());
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ protected ꆼꆼꆼꆼ.
	 *
	 * @param	type	ꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * @param	message	ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 */
	protected void notifyStoreListeners(int type, String message) {
		super.notifyStoreListeners(type, message);
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 */
	protected void finalize() throws Throwable {
		try {
			if (isConnected()) {
				close();
			}
		} finally {
			super.finalize();
		}
	}
		
	// ꆼꆼꆼꆼꆼ POP3Store ꆼꆼꆼꆼꆼꆼꆼ
	/**
	 * ꆼꆼꆼꆼꆼꆼ.
	 * debug ꆼꆼꆼꆼꆼꆼ true ꆼꆼꆼꆼꆼꆼ System.err ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param msg	ꆼꆼꆼꆼꆼꆼꆼ.
	 */
	protected void debugOut(String msg) {
		if (debug) {
			StringBuffer sb = new StringBuffer("DEBUG:");
			sb.append(msg);
			System.err.println(sb.toString());
		}
	}
	
	/**
	 * Store ꆼꆼꆼꆼꆼꆼ.
	 */
	private void initStore(URLName urlname) {
//		initShutdownHook();
		loadProperties();
		loadParameters(urlname);
		loadUIDL();

		// rootꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		if (! getRootDirectory().exists()) {
			getRootDirectory().mkdirs();
		}
		
		// INBOX ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		File inboxFolder = new File(rootDirectory, INBOX_NAME);
		if (! inboxFolder.exists()) {
			inboxFolder.mkdirs();
		}
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 */
	private void initShutdownHook() {
		try {
			Class[] paramClass = new Class[1];
			paramClass[0] = Thread.class;
			
			Method method = Runtime.class.getMethod("addShutdownHook", paramClass);
			Runtime runtime = Runtime.getRuntime();
			
			Object[] param = new Object[1];
			param[0] = new Thread() {
				public void run() {
					try {
						debugOut("POP3Store shutdown now");
						close();
					} catch (MessagingException me) {
						me.printStackTrace();
					}
				}
			};
			method.invoke(runtime, param);
		} catch (IllegalAccessException iae) {
			iae.printStackTrace();
			debugOut("POP3Store.initShutodownHook:IllegalAccessException:" + iae);
		} catch (NoSuchMethodException nsme) {	// JDK1.3 ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼaddShutdownHook ꆼꆼꆼꆼꆼꆼꆼ
//			nsme.printStackTrace();
			debugOut("POP3Store.initShutdownHook:NoSuchMethodException:" + nsme);
		} catch (InvocationTargetException ite) {
			Throwable t = ite.getTargetException();
			if (t instanceof Error) {
				throw (Error) t;	// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
			} else if (t instanceof Exception) {
				debugOut("POP3Store.initShutdownHook:InvocationTergetException:targetException:" + t);
			}
		}
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	private void loadProperties() {
		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String root = session.getProperty(ROOTDIRECTORY_PROPERTY);
		if (root == null) {
			rootDirectory = new File(System.getProperty("user.dir"));
		} else {
			rootDirectory = new File(root);
		}
		debugOut(ROOTDIRECTORY_PROPERTY + "=" + rootDirectory.getAbsolutePath());
		
		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String interval = session.getProperty(INTERVAL_PROPERTY);
		if (interval == null) {
			checkInterval = DEFAULT_CHECK_INTERVAL;
		} else {
			checkInterval = Long.parseLong(interval) * 1000L * 60L;	// ꆼꆼꆼꆼꆼꆼꆼꆼ.
		}
		debugOut(INTERVAL_PROPERTY + "=" + checkInterval + " (ms)");

		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String los = session.getProperty(LEAVE_ON_SERVER_PROPERTY);
		if (los == null) {
			leaveOnServer = true;
		} else {
			leaveOnServer = Boolean.valueOf(los).booleanValue();
		}
		debugOut(LEAVE_ON_SERVER_PROPERTY + "=" + leaveOnServer);
		
		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String off = session.getProperty(OFFLINEMODE_PROPERTY);
		if (off == null) {
			offlineMode = false;
		} else {
			offlineMode = Boolean.valueOf(off).booleanValue();
		}
		debugOut(OFFLINEMODE_PROPERTY + '=' + offlineMode);
		
		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String auth = session.getProperty(AUTHMODE_PROPERTY);
		if (auth == null) {
			authMode = NORMAL_AUTH;
		} else {
			authMode = auth.toUpperCase();
		}
		debugOut(AUTHMODE_PROPERTY + '=' + authMode);

		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String fname = session.getProperty(RECEIVING_FOLDER_PROPERTY);
		if (fname == null) {
			receivingFolderName = INBOX_NAME;
		} else {
			receivingFolderName = fname;
		}
		debugOut(RECEIVING_FOLDER_PROPERTY + '=' + receivingFolderName);
		
		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String actns = session.getProperty(CHECK_ACTION_PROPERTY);
		if (actns == null) {
			checkActions.addElement(RECEIVING_ACTION_OPEN);
			checkActions.addElement(RECEIVING_ACTION_HASNEWMESSAGES);
		} else {
			StringTokenizer tokenizer = new StringTokenizer(actns.trim(), ",");
			while (tokenizer.hasMoreTokens()) {
				checkActions.addElement(tokenizer.nextToken());
			}
		}
		Enumeration e  = checkActions.elements();
		actns = "";
		while (e.hasMoreElements()) {
			actns += (String) e.nextElement() + ",";
		}
		debugOut(CHECK_ACTION_PROPERTY + '=' + actns);
		actns = null;
	
		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
		String im = session.getProperty(RECEIVE_IMMEDIATERY_PROPERTY);
		if (im == null) {
			receiveImmediatery = false;
		} else {
			receiveImmediatery = Boolean.valueOf(im).booleanValue();
		}
		debugOut(RECEIVE_IMMEDIATERY_PROPERTY + '=' + receiveImmediatery);
		
		// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
		String lhf = session.getProperty(LIST_HIDDEN_FOLDERS_PROPERTY);
		if (lhf == null) {
			listHiddenFolders = false;
		} else {
			listHiddenFolders = Boolean.valueOf(lhf).booleanValue();
		}
		// File.isHidden() ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
		// isHiddenꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
		if (! SubFolderFilter.isHiddenMethodSupported()) {
			debugOut("WARNING:" + LIST_HIDDEN_FOLDERS_PROPERTY + " not supported because method File.isHidden() not exists, ignored.");
		}
		debugOut(LIST_HIDDEN_FOLDERS_PROPERTY + '=' + listHiddenFolders);

		// Socketꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
		String to = session.getProperty(TIMEOUT_PROPERTY);
		if (to == null) {
			timeout = 0;
		} else {
			timeout = Integer.parseInt(to);
		}
		debugOut(TIMEOUT_PROPERTY + '=' + timeout);
	}
	
	
	/**
	 * URLNameꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	urlname	URLName.
	 */
	private void loadParameters(URLName urlname) {
		Hashtable options = parseParameters(urlname);
		Enumeration e = options.keys();
		debugOut("POP3Store.loadParameters(): parameter loading...");
		String params = "";
		while (e.hasMoreElements()) {
			String key = (String) e.nextElement();
			String value = (String) options.get(key);
			if (params.length() > 0) {
				params += ',';
			}
			params += key + '=' + value;
		}
		debugOut(params);
		String rd = (String) options.get(LOCALSTORE_KEY);
		if (rd != null) {
			rootDirectory = new File(rd);
			debugOut("rootDirectory has changed to " + rootDirectory);
		}
		
		String am = (String) options.get(AUTHMODE_KEY);
		if (am != null) {
			authMode = am;
			debugOut("authMode has changed to " + authMode);
		}
		
		if(options.get(SSL_KEY) != null){
			ssl=true;
			debugOut("ssl has changed to true");
		}
		
		//增加对leaveOnServer的覆盖
		if(options.get(leaveOnServer) != null){
			leaveOnServer= Boolean.valueOf((String)options.get("leaveOnServer"));
			debugOut("leaveOnServer has changed to " + leaveOnServer);
		}
		
		debugOut("POP3Store.loadParameters(): done.");
	}
	
	/**
	 * ꆼꆼꆼꆼꆼURLNameꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 *
	 * @param	urlname	ꆼꆼꆼꆼꆼꆼꆼ URLName.
	 * @return	ꆼꆼꆼꆼꆼꆼꆼꆼꆼ Hashtable.
	 */
	private Hashtable parseParameters(URLName urlname) {
		Hashtable options = new Hashtable();
		String optstr = urlname.getFile();
		if (optstr != null) {
			final int startpos = optstr.indexOf('?');
			if (startpos != -1 && startpos < optstr.length() - 1) {
				optstr = optstr.substring(startpos + 1);
				StringTokenizer st = new StringTokenizer(optstr, "&");
				while (st.hasMoreTokens()) {
					String pair = st.nextToken();
					int eqpos = pair.indexOf('=');
					String lvalue = (eqpos != -1) ? pair.substring(0, eqpos) : null;
					String rvalue = (eqpos != -1 && eqpos < pair.length() - 1) ? pair.substring(eqpos + 1) : null;
					if (lvalue != null) {
						options.put(lvalue, rvalue);
					}
				}
			}
		}
		return options;
	}

	/**
	 * UIDLꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 */
	private void loadUIDL() {
		uidlFile = new File(getRootDirectory(), UIDL_FILENAME);
		try {
			FileInputStream fis = new FileInputStream(uidlFile);
			BufferedInputStream bis = new BufferedInputStream(fis, 16 * 1024);
			ObjectInputStream ois = new ObjectInputStream(bis);
			uidList = (Vector) ois.readObject();
			ois.close();
		} catch (FileNotFoundException fnfe) {
			String dbgmsg = "UIDL file " + UIDL_FILENAME + " not found.";
			debugOut(dbgmsg);
			notifyStoreListeners(StoreEvent.NOTICE, dbgmsg);
			uidList = new Vector();
		} catch (IOException ioe) {
			String dbgmsg = "IOException " + ioe;
			debugOut(dbgmsg);
			notifyStoreListeners(StoreEvent.ALERT, dbgmsg);
			uidList = new Vector();
		} catch (ClassNotFoundException cnfe) {
			String dbgmsg = "ClassNotFoundException " + cnfe;
			debugOut(dbgmsg);
			notifyStoreListeners(StoreEvent.ALERT, dbgmsg);
			uidList = new Vector();
		}
	}
	
	/**
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
	 * ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.

⌨️ 快捷键说明

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