<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    細心!用心!耐心!

    吾非文人,乃市井一俗人也,讀百卷書,跨江河千里,故申城一游; 一兩滴辛酸,三四年學業,五六點粗墨,七八筆買賣,九十道人情。

    BlogJava 聯系 聚合 管理
      1 Posts :: 196 Stories :: 10 Comments :: 0 Trackbacks

    如何使用JSP開發WebMail系統

     

    電子郵件(E-mail)是Internet上使用最廣泛的服務之一,傳統的Email應用模式基于C/S結構,即用戶使用客戶端的郵件收發工具(如Outlook、Foxmail等)與提供郵件服務的服務器(如163.net、263.net、371.net)通信,在使用客戶端郵件工具之前,用戶要進行一些必要的設置,如指定郵件服務器的主機地址和通信端口等,這些工作對剛開始上網的用戶會有一定的困難,如果把E-mail和Web結合在一起,即通過Web編程和適當的系統設置,使用戶僅僅以訪問Web的方式就可以得到和使用完整的郵件服務,這樣將極大地方便上網用戶,這種系統稱為WebMail。WebMail是目前Internet上最受歡迎的服務之一,也是很多網站必備功能之一。另外WebMail同樣也適用于企業或校園網的應用。

    通常在后臺服務器的搭建和設置完成后實現WebMail系統,而前臺的開發工作主要是開發工具與后臺數據庫和郵件服務器的交互問題。在Linux平臺上運行的各種服務器軟件穩定性和可靠性一直很好,而且選擇跨平臺的Java開發工具使系統更穩定,具有更高的伸縮性。


    JSP性能


    盡管JSP提供強大的功能是建立在Servlet之上,但JSP的性能和Servlet相差無幾。JSP首先要編譯成Servlet,這只會增加少量的代碼,僅需編譯一次且可以預編譯,這就消除了運行時花費不必要的負擔。JSP與Servlet性能上的差異僅僅表現在返回的數據是二進制的。這是因為JSP返回時用的是PrintWriter,而Servlet可以應用于速度更快的OutputStream。

    JSP自定義的標簽庫可以封裝大量的、復雜的Java操作在一個Form里面,這些預先定義好的標簽可以很容易的被那些沒有Java知識的人調用。因此,JSP自定義的標簽庫可以有效地實現Java程序員和Web設計人員工作的劃分。然而,在頁面上應用的每一個標簽,Web容器都必須創建一個新的標簽句柄對象或從標簽緩沖中提取它。因此,過多的應用自定義的標簽將會帶來不必要的資源浪費。

    BodyTags是一種特殊的定制標簽,可以提取在它之間封裝的內容或者替換那些內容。BodyTags之間的內容一般會備份在內存中。由于BodyTags之間能夠嵌套和重復,因此,在程序中應用了多級的BodyTags會占用大量寶貴的內存和系統資源。


    實現WebMail的主要功能


    該系統提供了獲取、閱讀、書寫、轉發、回復、打印、刪除及用戶管理的功能??紤]到系統的跨平臺性,采用Java及相關技術產品為開發工具,特別是采用JSP作為服務程序,這樣對客戶端也沒有其它要求,同時系統的性能在高負荷下得到進一步提高。整個WebMail系統全部采用純Java代碼,服務器端每響應一個服務請求啟動一個線程,而不像CGI那樣啟動一個進程。這樣能夠節省系統資源,提高系統性能。


    實現主要代碼


    獲取用戶輸入的信息

    對于用戶輸入內容獲取功能是通過getParameter方法來實現的,對于輸入的文本內容,通過如下代碼就能在服務器端獲取,程序代碼如下:


    String username=request.getParameter("login");
    String password=request.getParameter("password");
    Session session2=Session.getInstance(System.getProperties() ,null);
    Store store=session2.getStore("pop3");

     


    根據用戶輸入的信息來連接服務器,程序代碼如下:


    try{
     store.connect(host,username+"%nyist.net", password);
    }
    catch(javax.mail.AuthenticationFailedException e)
    {content="用戶名與密碼不匹配";}

     


    接收郵件代碼段

    根據獲取用戶輸入的信息來連接服務器,代碼為:


    store.connect("nyist.net",-1,request.getParameter("username")+"%nyist.net",request
    .getParameter("password"));

     


    獲取服務器端的信息,代碼如下:


    Folder folder = store.getFolder("INBOX");
    Folder.open (Folder.READ_WRITE);
    Message message[]=folder.getMessages();
    FetchProfile fp=new FetchProfile();
    fp.add(FetchProfile.Item.ENVELOPE);
    fp.add(FetchProfile.Item.FLAGS);
    fp.add("X-Mailer");
    folder.fetch(message,fp);

     


    根據服務器上信息的不同格式,使用不同的方式來讀?。?/p>


    String contentbody="";
    Object o=message[j].getContent();

     


    若其Type為tex/plain就可直接讀出,代碼如下:


    if (message[j].isMimeType("text/plain"))
    {
     contentbody=(String)+"</td>";
     StringBuffer  buf=new  StringBuffer(contentbody.length()+6);
     char  ch=' ';
     for(int  p=0;p<contentbody.length();p++)//若遇到換行就轉為<br>
     {ch=contentbody.charAt(p);
      if(ch=='\n')buf.append("<br>");
      else  buf.append(ch);
     }
     contentbody=buf.toString();
    }

     


    如果信息類型為text/html,不同的信息類型處理的方式稍有不同(如下段代碼),由于篇幅有限不再一一說明。


    else if (message[j].isMimeType("text/html"))
     contentbody=(String)o+"</td>";

     


    發送郵件代碼段

    根據用戶輸入的內容,獲取郵件頭信息代碼如下:


    String host = "nyist.net";
    String from = request.getParameter("from");
    String to = request.getParameter("to");
    String subject = request.getParameter("subject");
    String content = request.getParameter("content");
    Properties props = System.getProperties();
    //設置郵件服務
    props.put("mail.smtp.host", host);
    Session session2 =Session.getInstance(props, null);

     


    設置郵件頭信息代碼如下:


    MimeMessage message =new MimeMessage(session2);
    message.setFrom(new InternetAddress(from));
    message.addRecipient(Message.RecipientType.TO,new InternetAddress(to));
    message.setSubject(subject);
    message.setSentDate(new Date());
    // create the message part
    MimeBodyPart messageBodyPart =new MimeBodyPart();

     


    設置郵件內容,構建程序段如下:


    messageBodyPart.setText(content);
    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);

     


    用戶在發送郵件時常常帶有附件,就是將瀏覽器客戶端用戶本地的文件傳送到POP客戶端,實現代碼如下:


    for (int i=0;i<mySmartUpload.getFiles().getCount();i++)
    {
     com.jspsmart.upload.File myFile = mySmartUpload.getFiles().getFile(i);
     if (!myFile.isMissing()) {
     myFile.saveAs("/upload/" + myFile.getFileName());
     count ++;
    }

     


    在上傳附件的同時,對上傳文件的數量進行統計,并通過out.println("上傳了"+count + "個文件")將其在屏幕上顯示出來。

    在發送的信件中如果有附件,使用如下代碼進行發送:


    for(int i=0;request.getParameter("file"+i)!=null;i++)
    {
     messageBodyPart = new MimeBodyPart();
     File file=new File("/home/mengyu/ROOT/upload/",request.getParameter("file"+i));
     DataSource source =new FileDataSource(file);
     messageBodyPart.setDataHandler(new DataHandler(source));
     messageBodyPart.setFileName(request.getParameter("file"+i));
     multipart.addBodyPart(messageBodyPart);
    }
    // Put parts in message
    message.setContent(multipart);

     


    調用Transport的send方法,將構造好MIME Message對象發送出去,代碼如下:


    Transport.send(message);

     


    刪除電子郵件代碼段

    在通過Web界面使用電子郵件過程中,經常要對接收到垃圾郵件或已查看過的郵件進行刪除,這也是電子郵件中必不可少的一個功能,所以我們設計了Web界面中刪除電子郵件的相應功能,主要程序代碼段如下:


    Folder folder=store.getFolder("INBOX");
    folder.open(Folder.READ_WRITE);
    Message message[]=folder.getMessages();
    String msg[]=request.getParameterValues("msg");
    for(int i=0,n=msg.length;i<n;i++)
     message[Double.valueOf(msg[i]).intValue()].setFlag(Flags.Flag.DELETED,true);
    folder.close(true);

     


    用戶管理

    在使用系統運行的過程中,通過管理界面添加用戶,刪除不必要的用戶,修改用戶的密碼,這是程序運行過程中必要的模塊,代碼如下:


    //添加用戶
    Runtime.getRuntime().exec("/home/vpopmail/bin/vadduser"+request.getParameter("user
    name")+"@nyist.net "+request.getParameter("passwd"));
    //刪除用戶
    Runtime.getRuntime().exec("/home/vpopmail/bin/vdeluser"+request.getParameter("user
    name")+"@nyist.net");
    //修改用戶密碼
    Runtime.getRuntime().exec("/home/vpopmail/bin/vpasswd"+request.getParameter("usern
    ame")+"@nyist.net "+request.getParameter("passwd"));

     總結
    Java簡化了企業解決方案的開發、部署和管理等相關的復雜問題,它是面向對象的編程語言,同時也是具有平臺獨立性、高性能的服務器端編程語言。它提供的標準系統框架和服務適合團體開發,可控制性好,與其它資源的集成性好。采用Java為編程工具開發高性能、高可用性的WebMail服務器具有非常重要的意義。

    posted on 2007-05-06 12:32 張金鵬 閱讀(127) 評論(0)  編輯  收藏

    只有注冊用戶登錄后才能發表評論。


    網站導航:
    博客園   IT新聞   Chat2DB   C++博客   博問  
     
    主站蜘蛛池模板: 久久久久久影院久久久久免费精品国产小说 | 久久久久亚洲av成人无码电影| 亚洲国产精品自在自线观看| 蜜臀91精品国产免费观看| 亚洲国产乱码最新视频| 精品国产免费观看| 成人亚洲国产精品久久| 免费一级毛片在级播放| 一级做a爱过程免费视| 亚洲乱码一区二区三区在线观看| 成人免费无码H在线观看不卡| 国产精品国产亚洲精品看不卡| 精品免费tv久久久久久久| 亚洲国产精品一区| 免费国产成人高清在线观看网站| 激情五月亚洲色图| 免费二级毛片免费完整视频| 一级做a爰片久久免费| 亚洲国产AV无码专区亚洲AV | eeuss影院免费92242部| 曰韩亚洲av人人夜夜澡人人爽| a级毛片无码免费真人久久| 久久精品a亚洲国产v高清不卡| 国产成人精品免费视频网页大全| 亚洲熟妇无码AV不卡在线播放| 免费人成无码大片在线观看| 在线观看片免费人成视频无码| 精品无码一区二区三区亚洲桃色| 成年人免费网站在线观看| 一个人看www免费高清字幕| 精品亚洲aⅴ在线观看| 免费jjzz在线播放国产| 久久精品国产大片免费观看| 亚洲成人激情小说| 亚洲最大AV网站在线观看| 成人免费午夜无码视频| 成年免费大片黄在线观看com| 亚洲视频在线观看网站| 亚洲国产午夜福利在线播放 | 有色视频在线观看免费高清在线直播| 亚洲精品无码mv在线观看网站|