📄 minbox.java
字号:
/*
* This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/).
*/
package ch05.module;
import java.sql.*;
import java.util.*;
import java.text.*;
import javax.mail.*;
import javax.mail.internet.*;
import javax.servlet.http.*;
import ch05.*;
/**
* 针对注册页面的后台处理类
* @author ShenYK
* @version 1.0
*/
public class MInbox
{
public boolean getNewestMail ( HttpSession mySession )
{
//设置用户信息用
Hashtable myValues = (Hashtable)mySession.getAttribute(CommonConst.VIEWID_INBOXLIST);
String sHost = "";
String sUser = "";
String sPass = "";
//尝试查找用户邮箱设置
try
{
//载入MySQL的JDBC驱动类
Class.forName(CommonConst.DB_DRIVER_CLASSNAME);
//获得数据库连接
Connection conn = DriverManager.getConnection( CommonConst.DB_CONN_STRING );
Statement stmt = null;
ResultSet rs = null;
String sUsername = (String)mySession.getAttribute("username");
try
{
//设置数据库的rollback点
conn.setAutoCommit(false);
//检查数据库中是否已经有该用户的邮箱设置
stmt = conn.createStatement();
//执行SQL语句
String sQuery = "select * from mail_setting where username='" + sUsername + "'";
rs = stmt.executeQuery( sQuery );
if (rs.next() )
{
sHost = rs.getString(2);
sUser = rs.getString(3);
sPass = rs.getString(4);
}
else
{
mySession.setAttribute("errMsg","请首先进行邮箱设置!");
return false;
}
//尝试连接Pop3服务器
Properties props = System.getProperties();
Session session = Session.getDefaultInstance(props, null);
//获得收件箱
Store store = session.getStore("pop3");
store.connect( sHost, sUser, sPass);
//获得Folder,并按照只读打开
Folder folder = store.getFolder( "INBOX" );
folder.open( Folder.READ_WRITE );
//获得所有邮件,并依次获取内容
Message messages[] = folder.getMessages();
//往数据库中登录
for ( int i=0; i<messages.length; i++ )
{
//只要不是html格式,大概没有乱码问题。。。
String sFrom = MailContent.getFrom( messages[i].getFrom()[0].toString() );
String sTo = MailContent.getFrom( messages[i].getRecipients( Message.RecipientType.TO )[0].toString() );
String sDate = (new SimpleDateFormat("yyyy/MM/dd HH:mm:ss")).format(messages[i].getSentDate());
String sSubject = messages[i].getSubject();
String sContent = "";
//如果纯文本邮件内容
if ( messages[i].getContent() instanceof String )
{
sContent = (String) messages[i].getContent();
}
//如果HTML格式邮件内容
else
{
sContent = ((MimeMultipart)messages[i].getContent()).getBodyPart(0).getContent().toString();
}
//插入数据库
String sUpdateQuery = "insert into inbox values('" + sUsername + "', '"
+ sFrom + "', '"
+ sTo + "', '"
+ sDate + "', '"
+ sSubject + "', '"
+ sContent + "', '0') ";
stmt.executeUpdate( sUpdateQuery );
}
conn.commit();
conn.setAutoCommit(true);
//删除服务器上的邮件
for ( int i=0; i<messages.length; i++ )
{
messages[i].setFlag( Flags.Flag.DELETED, true );
}
folder.close(true);
store.close();
//重新获取数据库中的所有邮件,并表示在页面上
Vector vMails = new Vector();
sQuery = "select * from inbox where username='" + sUsername + "' order by send_time desc";
rs = stmt.executeQuery( sQuery );
while ( rs.next() )
{
String sFrom = rs.getString(2);
String sTo = rs.getString(3);
String sDate = rs.getString(4);
String sSubject = rs.getString(5);
String sContent = rs.getString(6);
String sReadFlg = rs.getString(7);
MailContent mc = new MailContent();
mc.setSender(sFrom);
mc.setReceiver(sTo);
mc.setSendTime(sDate);
mc.setSubject(sSubject);
mc.setContent(sContent);
mc.setReadFlg(sReadFlg);
vMails.add( mc );
}
myValues.put( "mails", vMails );
}
catch(Exception e)
{
conn.rollback();
e.printStackTrace();
mySession.setAttribute("errMsg","查找邮件时出现错误!");
return false;
}
finally
{
try
{
rs.close();
stmt.close();
}catch(Exception ex)
{
}
}
}catch(Exception ex)
{
ex.printStackTrace();
mySession.setAttribute("errMsg","查找邮件时出现错误!");
return false;
}
return true;
}
public boolean getDetailMail( HttpSession mySession, String sMailIndex )
{
try
{
//所有邮件的列表
Hashtable listValues = (Hashtable)mySession.getAttribute(CommonConst.VIEWID_INBOXLIST);
//本页面使用的值
Hashtable myValues = (Hashtable)mySession.getAttribute(CommonConst.VIEWID_INBOXDETAIL);
Vector vMails = (Vector)listValues.get("mails");
int iIndex = Integer.parseInt(sMailIndex);
MailContent mailContent = (MailContent)vMails.get(iIndex);
myValues.put( "mail", mailContent );
//设置邮件已读标志
String sReadFlg = mailContent.getReadFlg();
if ( sReadFlg.equals("0") )
{
//载入MySQL的JDBC驱动类
Class.forName(CommonConst.DB_DRIVER_CLASSNAME);
//获得数据库连接
Connection conn = DriverManager.getConnection( CommonConst.DB_CONN_STRING );
Statement stmt = null;
ResultSet rs = null;
String sUsername = (String)mySession.getAttribute("username");
String sSender = mailContent.getSender();
String sSendTime = mailContent.getSendTime();
try
{
//检查数据库中是否已经有该用户的邮箱设置
stmt = conn.createStatement();
String sUpdateQuery = "update inbox set read_flg='1' "
+ "where username='" + sUsername + "' and "
+ "sender = '" + sSender + "' and "
+ "send_time = '" + sSendTime + "'";
stmt.executeUpdate( sUpdateQuery );
}
catch(Exception e)
{
e.printStackTrace();
mySession.setAttribute("errMsg","阅读邮件时出现错误!");
return false;
}
finally
{
try
{
rs.close();
stmt.close();
}catch(Exception ex)
{
}
}
}
return true;
}
catch(Exception e)
{
e.printStackTrace();
mySession.setAttribute("errMsg","显示邮件时出现错误!");
return false;
}
}
//删除指定邮件
public boolean deleteMail( HttpSession mySession, String sSender, String sSendTime )
{
//删除对应的邮件
try
{
//载入MySQL的JDBC驱动类
Class.forName(CommonConst.DB_DRIVER_CLASSNAME);
//获得数据库连接
Connection conn = DriverManager.getConnection( CommonConst.DB_CONN_STRING );
Statement stmt = null;
ResultSet rs = null;
String sUsername = (String)mySession.getAttribute("username");
try
{
//检查数据库中是否已经有该用户的邮箱设置
stmt = conn.createStatement();
String sDeleteQuery = "delete from inbox where username='" + sUsername + "' and "
+ "sender = '" + sSender + "' and "
+ "send_time = '" + sSendTime + "'";
stmt.executeUpdate( sDeleteQuery );
}
catch(Exception e)
{
e.printStackTrace();
mySession.setAttribute("errMsg","删除邮件时出现错误!");
return false;
}
finally
{
try
{
rs.close();
stmt.close();
}catch(Exception ex)
{
}
}
}catch(Exception ex)
{
ex.printStackTrace();
mySession.setAttribute("errMsg","删除邮件时出现错误!");
return false;
}
return true;
}
//回复指定邮件
public boolean replyMail( HttpSession mySession, String sSender, String sSubject, String sContent )
{
try
{
//本页面使用的值
Hashtable myValues = (Hashtable)mySession.getAttribute(CommonConst.VIEWID_SENDBOXDETAIL);
//如果是回复的话,应该明示邮件标题
String sNewSubject = "";
if ( sSubject.toUpperCase().startsWith("RE:") )
{
sNewSubject = sSubject;
}
else
{
sNewSubject = "Re:" + sSubject;
}
//改善:在原邮件内容每行的开头加上“> ”的符号
String[] sContents = sContent.split("\r\n");
StringBuffer sbContent = new StringBuffer();
for ( int i=0; i<sContents.length; i++ )
{
sbContent.append( "\r\n> "+sContents[i]);
}
myValues.put( "receiver", sSender );
myValues.put( "subject", sNewSubject );
myValues.put( "content", sbContent.toString() );
return true;
}
catch(Exception e)
{
e.printStackTrace();
mySession.setAttribute("errMsg","准备回复邮件时出现错误!");
return false;
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -