内部简易邮件收发功能java实现

最简单的功能:1、收件箱 2、发件箱 3、发邮件(群发) 4、逻辑删除收件 5、逻辑删除发件 6、邮件查看

内容包括:

1、struts配置文件

2、jsp

3、Action

4、数据库结构

5、webEditor

6、附件上传组件(apatch)

try {
	dc.connect();
	// dc.setAutoCommit(false);

	InputStream is = null; // 输入流
	// Create a new file upload handler
	DiskFileUpload upload = new DiskFileUpload(); 
	upload.setSizeMax(size);
	// Parse the request
	List items = null; 
	try {
		items = upload.parseRequest(request);
	} catch (Exception _ex) {
		error = "附件太大!"; 
	}

	Iterator iter = items.iterator();
	while (iter.hasNext()) {
		FileItem item = (FileItem) iter.next();
		if (item.isFormField()) { // 如果是普通表单
			if (item.getFieldName().equals("artice_title")) {
				artice_title = item.getString("GBK");
			} else if (item.getFieldName().equals("TZNR")) {
				article_content = item.getString("GBK");
			} else if (item.getFieldName().equals("recieverID")) {
				reciever = item.getString("GBK");
			}
		} else { // 如果是文件域表单
			is = item.getInputStream(); // 获得上传文件的输入流
			size = item.getSize(); // 文件大小 
			filename = new String(item.getName().getBytes("ISO8859-1"),
					"GBK"); 
			if (!filename.equals("")) {
				filename = filename.substring(filename
						.lastIndexOf("\\") + 1); 
			}
		}
	} 
	// 插入信息
	sql = "select  email_sequence.nextval from dual";
	ds = dc.retrieve(sql);
	String mail_id = String.valueOf(ds.getItemDouble(1, 1).intValue());
	sql = " INSERT INTO info_email(mail_id,send_time,mail_title,Mail_content,sender_id,attatch,attatch_file_name) values('"
			+ mail_id ..... "',empty_blob(),'" + filename + "')";
	log4j.info(sql);
	dc.update(sql);
	if (!filename.equals("")) {
		Connection con = null;
		OracleStatement st = null;
		OracleResultSet rs = null;

		try {
			// 通过JNDI获得数据库连接
			String driverClass = this.getServlet().getServletConfig()
					.getInitParameter("driverClass");
			String jdbcUrl = this.getServlet().getServletConfig()
					.getInitParameter("jdbcUrl");
			String user = this.getServlet().getServletConfig()
					.getInitParameter("user");
			String password = this.getServlet().getServletConfig()
					.getInitParameter("password");
			System.out.println(driverClass);
			con = DriverManager.getConnection(jdbcUrl, user, password);

			// 处理事务
			con.setAutoCommit(false);
			st = (OracleStatement) con.createStatement();

			// 用for update方式锁定数据行
			rs = (OracleResultSet) st
					.executeQuery("SELECT ATTATCH FROM INFO_EMAIL WHERE MAIL_ID = '"
							+ mail_id + "'  FOR UPDATE");

			if (rs.next()) {
				// 得到java.sql.Blob对象,然后Cast为oracle.sql.BLOB
				oracle.sql.BLOB blob = (oracle.sql.BLOB) rs.getBLOB(1);
				// 到数据库的输出流
				OutputStream out = blob.getBinaryOutputStream();
				int b_size = ((oracle.sql.BLOB) blob).getBufferSize();
				byte[] buffer = new byte[b_size]; // 建立缓冲区
				int len = -1;
				System.out.println("len=" + len);
				while ((len = is.read(buffer)) != -1) {
					System.out.println("len=" + len);
					out.write(buffer, 0, len);
				}
				out.flush();
				out.close();
			}
		} catch (Exception e) {
			log4j.error("邮件上传附件出错!!");
			e.printStackTrace();
		} finally {
			con.commit();
			con.setAutoCommit(true);
			if (rs != null) {
				rs.close();
				rs = null;
			}
			if (st != null) {
				st.close();
				st = null;
			}
			if (con != null) {
				con.close();
				con = null;
			}
		}
		is.close();
	}
	// 插入邮件接收信息
	String[] id = reciever.split(",");
	for (int i = 0; i < id.length; i++) {
		if (!id[i].trim().equals("")) {
			sql = "insert into info_email_recieve(mail_id,reciever_id) "
					+ "values('" + mail_id + "','" + id[i] + "')";
			// System.out.println("sql" + i + sql);
			dc.update(sql, false);
		}
	}

	dc.commit(); 
} catch (Exception _ex) {
	....
} finally {
	dc.setAutoCommit(true);
	dc.disconnect(); 
}

 注意:

1.第76行,一定将oracle数据库的blob对象强制转换为oracle.sql.BLOB,而不是oracle.sql.Blob,否则会报ClassCastException异常.

2.其中邮件发送页面会用到ajax动态级联下拉列表,所用到的包是myjar.jar

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值