`
thousandzhang
  • 浏览: 30341 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

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

    博客分类:
  • 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

分享到:
评论
1 楼 a545807638 2011-05-25  
好厉害,

相关推荐

    JAVA上百实例源码以及开源项目源代码

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    JAVA上百实例源码以及开源项目

     util实现Java图片水印添加功能,有添加图片水印和文字水印,可以设置水印位置,透明度、设置对线段锯齿状边缘处理、水印图片的路径,水印一般格式是gif,png,这种图片可以设置透明度、水印旋转等,可以参考代码...

    基于jbpm与activiti的工作流平台技术架构介绍

    宏天BPM X3软件平台是一...◦外部邮件管理 支持POP3,IMap协议的邮件服务收发功能,允许用户设置多个外部邮箱。 ◦内部短消息收发管理 在系统中用户之间可以收发短消息,如工作流任务的通知也采用短消息进行实时提醒。

    asp.net知识库

    存储过程中实现类似split功能(charindex) 通过查询系统表得到纵向的表结构 将数据库表中的数据生成Insert脚本的存储过程!!! 2分法-通用存储过程分页(top max模式)版本(性能相对之前的not in版本极大提高) 分页存储...

Global site tag (gtag.js) - Google Analytics