最简单的功能: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
分享到:
相关推荐
“简易邮件系统”是指设计简洁、易于使用的电子邮件服务系统,它可能包含了基础的邮件收发、搜索、分类和过滤功能。对于小型企业和个人用户而言,这样的系统既经济又实用,能够满足基本的通信需求。 “在线邮件系统...
这个"android email源代码"的资源,很可能是为了帮助开发者深入理解Android系统中如何处理邮件收发的内部机制,以及如何构建一个完整的邮件应用。下面将详细介绍相关知识点。 1. **Android Intents与Intent Filters...
### Apache James 邮件服务器配置详解 ...通过以上步骤,即可完成Apache James邮件服务器的基本配置,并实现内网间的邮件收发功能。此外,通过适当的网络配置,还可实现与外部邮件系统的互联互通。
### Android即时通讯方案知识点概述 ...综上所述,简易即时通讯系统的设计不仅要考虑功能的多样性,还需要注重安全性、稳定性和用户体验。通过合理的架构设计和技术选型,可以构建出高效稳定的即时通讯系统。