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

📄 context.java

📁 一个简单的java邮件系统
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
/*
 * @(#)Context.java
 *
 * Copyright (C) 2005 Sergey Bredikhin
 *
 * This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License as
 * published by the Free Software Foundation; either version 2 of
 * the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be
 * useful, but WITHOUT ANY WARRANTY; without even the implied
 * warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR
 * PURPOSE. See the GNU General Public License for more details.
 * You should have received a copy of the GNU General Public
 * License along with this program; if not, write to the Free
 * Software Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139,
 * USA.
 */

package olivax.webmail;

import java.io.IOException;
import java.io.PrintWriter;
import java.lang.reflect.Constructor;
import java.util.Enumeration;
import java.util.Locale;
import java.util.Properties;
import java.util.ResourceBundle;
import java.util.Vector;
import java.util.regex.Pattern;

import javax.activation.DataHandler;
import javax.mail.internet.MimeBodyPart;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.jsp.JspWriter;

import oliva.common.OlivaUtils;
import oliva.mail.Coder;
import oliva.mail.MailBean;
import oliva.mail.MessageHeader;
import oliva.mail.NewMessage;
import oliva.ssl.SSLUtils;

public class Context {

	public Context() {
		super();
	}

	public MailBean mailBean = new MailBean();
	
	public static final String xMailer = "OlivaMail/Webmail 1.5.4"; //$NON-NLS-1$
	
	// This codepage is used for html pages, produced by servlets' output. Hence the name "Client Codepage"
	public static final String clntCp = "UTF-8";
	
	// This codepage is used to read from string resource files
	public static final String resCp = "UTF-8";

	private static final String imgPattern = "<\\s*[iI][mM][gG]\\s+";	
	
	public oliva.mail.Message currentMessage = null;

	public int currentMsgNo = -1;

	public String currentMsgUID = null;

	public String currentCp = null;

	public Storage storage = null;

	public Properties cpProps = new Properties();
	
	public Properties langProps = new Properties();
	
	public Properties strings = new Properties();	
	
	private boolean settingsLoaded = false;
	
	private boolean loggedIn = false;
	
	private boolean adminLoggedIn = false;
	
	public String lang = "";
	
	public boolean _admin_enabled = false;
	
	public boolean _hints_enabled = false;
	
	public boolean _delayed_message = false;
	
	public boolean _storage_enabled = false;	
	
	private oliva.mail.NewMessage delayedMsg = null;	
	
	private PdaPane pdaLogo = null; 
	
	private WebPane webLogo = null;
	
	private void cleanState() {
		currentMessage = null;
		currentMsgNo = -1;
		currentMsgUID = null;
		currentCp = null;
	}

	public synchronized void getBinaryPart(int msgno, String msguid,
			int partno, JspWriter out)
			throws Exception {
		oliva.mail.Message msg = getMessage(msgno, msguid, null);
		mailBean.openFolder(true);
		msg.getBinaryPart(partno, out);
		mailBean.closeFolder();
	}

	public synchronized void getBinaryPart(int msgno, String msguid,
			int partno, PrintWriter out)
			throws Exception {
		oliva.mail.Message msg = getMessage(msgno, msguid, null);
		mailBean.openFolder(true);
		msg.getBinaryPart(partno, out);
		mailBean.closeFolder();
	}
		
	public synchronized oliva.mail.Message getMessage(int msgno, String msguid,
			String cp) throws Exception {
		boolean identical = true;
		if (currentMsgNo != msgno
				|| !OlivaUtils.nvl(currentMsgUID).equals(OlivaUtils.nvl(msguid))) {
			identical = false;
		}
		if (!OlivaUtils.nvl(cp).equalsIgnoreCase(OlivaUtils.nvl(currentCp)))
			identical = false;
		if (identical)
			return currentMessage;
		else
			return getMessageNoCache(msgno, msguid, cp);
	}

	public synchronized oliva.mail.Message getMessageNoCache(int msgno,
			String msguid, String cp)
			throws Exception {
		cleanState();
		currentMessage = mailBean.getMessageFromList(msgno, msguid, cp);
		if (currentMessage != null) {
			currentMsgNo = msgno;
			currentMsgUID = msguid;
			currentCp = cp;
		}
		return currentMessage;
	}

	public synchronized void prepareStorage(String className, String url, 
			String schema, String user, String pass) throws Exception {
		if (storage != null)
			return;
		Class storageClass = Class.forName(className);
		Constructor ct = storageClass.getConstructor(null);
		storage = (olivax.webmail.Storage) ct.newInstance(null);
		storage.setDatabaseUrl(url); //$NON-NLS-1$
		storage.setSchema(schema); //$NON-NLS-1$
		storage.setCredentials(user, pass);
	}

	public synchronized void closeStorage() {
		if (!_storage_enabled)
			return;
		if (storage == null)
			return;
		try {
			storage.close();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
		
	public String getSenderDomain() {
		return getI18nString("_settings.sender_domain");
	}
	
	public String getI18nString(String str) {
//		return OlivaUtils.nvl(strings.getProperty(str));
		String result = '!' + str + '!';
		str = strings.getProperty(str);
		if(str != null)
			result = str;
		return result;
	}
		
	public synchronized void loadSettings(ServletRequest request) throws Exception {
		if (settingsLoaded)
			return;
		java.util.ResourceBundle bundle = java.util.ResourceBundle.getBundle(
				"settings", java.util.Locale.US);
		for (java.util.Enumeration e = bundle.getKeys(); e.hasMoreElements();) {
			String key = (String) e.nextElement();
			String value = oliva.common.OlivaUtils.getStringInternals(bundle
					.getString(key), resCp);
			strings.setProperty(key, value);
		}

		_hints_enabled = OlivaUtils.parseBoolean(getI18nString("_settings.hints_enabled"),
				true);
		_delayed_message = OlivaUtils.parseBoolean(
				getI18nString("_settings.delayed_message"), true);
		_admin_enabled = OlivaUtils.parseBoolean(getI18nString("_settings.admin_enabled"),
				false);						
		_storage_enabled = OlivaUtils.parseBoolean(
				getI18nString("_settings.storage_enabled"), false);

		//clntCp = getI18nString("_settings.clientCodePage");		
		
		mailBean.setXMailer(xMailer);		
		mailBean.setSendCodePage(getI18nString("_settings.sendCodePage"));
		mailBean.setDefaultCodePage(getI18nString("_settings.defaultCodePage"));
		mailBean.setHost(getI18nString("_settings.server_type"),
				getI18nString("_settings.incoming_server"),
				Integer.parseInt(getI18nString("_settings.incoming_port")));		
		mailBean.setUsePOP3UID(OlivaUtils.parseBoolean(
				getI18nString("_settings.native_pop3_msguid"),
				false));
		mailBean.setPageSize(Integer
				.parseInt(getI18nString("_settings.page_size")));
		mailBean.setSmtpHost(getI18nString("_settings.outgoing_server"),
				Integer.parseInt(getI18nString("_settings.outgoing_port")));
		mailBean.setSentFolder(getI18nString("_settings.sent_folder"));
		mailBean.setSortEnabled(OlivaUtils.parseBoolean(
				getI18nString("_settings.sort_enabled"), false));
		mailBean.setLimitToSort(Integer
				.parseInt(getI18nString("_settings.sort_limit")));
		mailBean.setSizeLimit(Integer
				.parseInt(getI18nString("_settings.msg_size_limit")));
		if (getI18nString("_settings.smtp_auth").equalsIgnoreCase("true")) {
			mailBean.setSmtpAuth(true);
		} else {
			mailBean.setSmtpAuth(false);
		}

		// SSL
		if (OlivaUtils.parseBoolean(getI18nString("_settings.incoming_ssl"),
				false)) {
			SSLUtils.setSSL(getI18nString("_settings.server_type"), Integer
					.parseInt(getI18nString("_settings.incoming_port")), true);
		}
		if (OlivaUtils.parseBoolean(getI18nString("_settings.outgoing_ssl"),
				false)) {
			SSLUtils.setSSL("smtp", Integer
					.parseInt(getI18nString("_settings.outgoing_port")), true);
		}		
		
		if (_storage_enabled) {
			prepareStorage(getI18nString("_settings.storage_class"),
					getI18nString("_settings.storage_connect_str"),
					getI18nString("_settings.storage_schema"),
					getI18nString("_settings.storage_user"),
					getI18nString("_settings.storage_password"));			
		}
				
		bundle = java.util.ResourceBundle.getBundle("languages",
				java.util.Locale.US);
		for (java.util.Enumeration e = bundle.getKeys(); e.hasMoreElements();) {
			String key = (String) e.nextElement();
			String value = oliva.common.OlivaUtils.getStringInternals(bundle
					.getString(key), resCp);
			langProps.setProperty(key, value);
		}

		bundle = java.util.ResourceBundle.getBundle("codepages",
				java.util.Locale.US);
		for (java.util.Enumeration e = bundle.getKeys(); e.hasMoreElements();) {
			String key = (String) e.nextElement();
			String value = oliva.common.OlivaUtils.getStringInternals(bundle
					.getString(key), resCp);
			cpProps.setProperty(key, value);
		}

		settingsLoaded = true;
	}

	public synchronized boolean isLogonNeeded(ServletRequest request) throws Exception {
		String action = request.getParameter("action");
		if (OlivaUtils.nvl(action).equalsIgnoreCase("logout")) {
			loggedIn = false;
		}
		if (!loggedIn) {
			String user = request.getParameter("user");
			String pass = request.getParameter("pass");
			if (!OlivaUtils.nvl(user).equals("") && !OlivaUtils.nvl(pass).equals("")) {
				mailBean.setCredentials(user, pass);
				mailBean.setFolderName("INBOX");
				if (mailBean.logon() == 0) {
					mailBean.setSenderAddress(user
							+ getI18nString("_settings.sender_domain"));
					mailBean.setSmtpCredentials(user, pass);
					mailBean.setRichContent(OlivaUtils.parseBoolean(
							getI18nString("_settings.rich_content"), true));					
					if (_storage_enabled) {
						storage.setCredentials(
								getI18nString("_settings.storage_user"),
								getI18nString("_settings.storage_password"));
						storage.setAppUser(mailBean.getMyAddress(),
								OlivaUtils.parseBoolean(getI18nString(
										"_settings.storage_autouser")
										.toLowerCase(), false));
					}
					loggedIn = true;
				}
			}
		}
		return !loggedIn;
	}
		
	public synchronized boolean isPcBrowser(ServletRequest request) {
		String userAgent = ((HttpServletRequest) request)
				.getHeader("User-Agent");
		if (userAgent == null)
			return false;
		userAgent = userAgent.toUpperCase();

		boolean mozilla = (userAgent.indexOf("MOZILLA") != -1);
		boolean msie = (userAgent.indexOf("MSIE") != -1);
		boolean windowsNt = (userAgent.indexOf("WINDOWS NT") != -1);

		if ((mozilla || msie) && windowsNt) 
			return true;		
		
		boolean netscape = (userAgent.indexOf("NETSCAPE") != -1);
		boolean opera = (userAgent.indexOf("OPERA") != -1);
		boolean operaMini = (userAgent.indexOf("OPERA MINI") != -1);
		boolean windowsCe = (userAgent.indexOf("WINDOWS CE") != -1);
		boolean palm = (userAgent.indexOf("PALM") != -1);
		boolean j2me = (userAgent.indexOf("MIDP") != -1 || userAgent
				.indexOf("CLDC") != -1);
		
		if ((mozilla || netscape || opera) && 
				!(windowsCe || palm ||j2me || operaMini))
			return true;
		return false;
	}
	
	public synchronized void setLanguage(ServletRequest request) throws Exception {
		String oldLang = lang;
		if (lang.equals("")) {
			String accLang = ((HttpServletRequest) request)
					.getHeader("Accept-Language");
			// ru,ar-iq;q=0.8,zh-cn;q=0.5,en-gb;q=0.3
			if (accLang != null) {
				int idx = accLang.indexOf(",");
				if (idx != -1)
					accLang = accLang.substring(0, idx);
				idx = accLang.indexOf("-");
				if (idx != -1)
					accLang = accLang.substring(0, idx);
				accLang = accLang.trim().toLowerCase();
				if (langProps.getProperty(accLang) != null)
					lang = accLang;
			}
			if (lang.equals(""))
				lang = "en";
		}

		String parLang = request.getParameter("lang");
		if (parLang != null) {
			parLang = parLang.trim().toLowerCase();
			if (langProps.getProperty(parLang) != null)
				lang = parLang;
		}

		if (!lang.equals(oldLang)) {
			Locale locale = new Locale(lang, "");
			ResourceBundle bundle = ResourceBundle.getBundle("strings", locale);

			for (java.util.Enumeration e = bundle.getKeys(); e
					.hasMoreElements();) {
				String key = (String) e.nextElement();
				String value = oliva.common.OlivaUtils.getStringInternals(bundle
						.getString(key), resCp);
				strings.setProperty(key, value);
			}
		}		
	}

⌨️ 快捷键说明

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