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

📄 minbox.java

📁 网络邮件系统
💻 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 + -