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

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

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

    posts - 59, comments - 244, trackbacks - 0, articles - 0
      BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

    基于郵件服務(wù)器的聊天測試

    Posted on 2010-12-11 00:23 penngo 閱讀(2632) 評論(6)  編輯  收藏

    現(xiàn)在的郵件服務(wù)提供商很多,而且郵箱的速度也很不錯,相互之間也能互發(fā)信息,基于郵件服務(wù)器進行信息聊天,應(yīng)該也不錯。寫個簡易版的客戶端工具測試下。
    本文只做了純文本內(nèi)容的發(fā)送測試,圖片和附件的沒做。
    功能實現(xiàn)的原理很簡單:
    客戶端信息發(fā)送(郵件發(fā)送):和普通的smtp發(fā)送郵件一樣。
    客戶端信息接收(郵件接收):因為要馬上看到信息內(nèi)容,所以需要用一個線程,死循環(huán)的不斷登錄郵箱收郵件。
    代碼實現(xiàn)也很簡單,只是收發(fā)郵件的代碼,這里不詳說。
    收發(fā)郵件的組件是javaMail,界面是swing做的。

    收發(fā)信息實現(xiàn)類EmailUtil.java

    public class EmailUtil {
        
    private Account accout;
        
    private static Session session;
        
    private static Store store;
        
    private Date latestSentDate;
        
    public EmailUtil(){
             
    if(session == null ){
                 initSession();
            }

        }

         
    public void send(String mail_body){
                
    try
                

                    
    if(session == null ){
                         
    boolean b = initSession();
                            
    if(b == false){
                                
    return;
                            }

                   }

                    MimeMessage mimeMsg 
    = new MimeMessage(session);   
                    mimeMsg.setSubject(
    "即時信息回復(fù)");   
                    Multipart mp 
    = new MimeMultipart();   
                    BodyPart bp1 
    = new MimeBodyPart();   
                    bp1.setContent(mail_body, 
    "text/html;charset=UTF-8");   
                    mp.addBodyPart(bp1);   
                    mimeMsg.setContent(mp);   
                    mimeMsg.setFrom(
    new InternetAddress(accout.getFromEmail()));   
                    mimeMsg.setRecipients(Message.RecipientType.TO, InternetAddress   
                            .parse(accout.getToEmail()));   
                    mimeMsg.saveChanges();   
                    Transport transport 
    = session.getTransport("smtp");   
                    transport.connect(accout.getSendHost(),   
                            accout.getName(), accout.getPassword());   
                    transport.sendMessage(mimeMsg, mimeMsg   
                            .getRecipients(Message.RecipientType.TO));   
                    transport.close();   
                }
     catch (Exception ex)
                
    {
                    JOptionPane.showMessageDialog(
    null"發(fā)送出錯:" + ex.getMessage());
                    System.out.println(
    "發(fā)送郵件出錯:");
                    ex.printStackTrace();
                }

            }

         
         
    public boolean receive(JEditorPane receivePane, StringBuffer sff){
             
    try{
                 
    if(session == null ){
                        
    boolean b = initSession();
                        
    if(b == false){
                            
    return false;
                        }

                   }

                 
    if(store == null || store.isConnected() == false){
                     URLName urln 
    = new URLName("pop3", accout.getReceiveHost(), 110null,  
                             accout.getName(), accout.getPassword());  
                      store 
    = session.getStore(urln);
                      store.connect();
                 }

                 Folder folder 
    = store.getFolder("INBOX");
                 folder.open(Folder.READ_ONLY);
                 System.out.println(
    "郵件數(shù):" + folder.getMessageCount());
                 
    if(latestSentDate == null){
                     latestSentDate 
    = DateUtil.parseDate("2010-12-10 00:00:00");
                 }

                Address fromEmail 
    = new InternetAddress(accout.getToEmail());
                SearchTerm term1 
    = new FromTerm(fromEmail);
                 SearchTerm st 
    = new SentDateTerm(SentDateTerm.GT, latestSentDate);
                 SearchTerm term 
    = new AndTerm(term1, st);
                 Message[] msgs 
    = folder.search(term);
                 System.out.println(
    "符合條件郵件數(shù):" + msgs.length);
                 
    if(msgs.length > 0){
                     
    for(int i = 0; i < msgs.length; i++){
                         Message m 
    = msgs[i];
                         String msg 
    = "";
                         
    try{
                             
    if(m.isMimeType("multipart/*")){
                                  Multipart mp
    =(Multipart)m.getContent();
                                  Part part
    =mp.getBodyPart(0);
                                  msg
    =(String)part.getContent();
                              }

                             
    else{
                                 msg 
    = (String)m.getContent();
                                 
                             }

                             latestSentDate 
    = m.getSentDate();
                             String from 
    = getFrom(m);
                             String sentUser 
    = "<span style=\"color:#1E90FF;\">" + from + "&nbsp;&nbsp;&nbsp;&nbsp;" + DateUtil.dateToStr(latestSentDate) + "</span><br/>";
                             sff.append(sentUser);
                             sff.append(msg 
    + "<br/><br/>");
                         }

                        
    catch(Exception e){
                            System.out.println(
    "讀取第" + i + "份郵件出錯");
                            e.printStackTrace();
                        }

                        }

                        receivePane.setText(sff.toString());
                 }

             }

            
    catch(Exception e){
                sff.append(
    "<font color=\"red\">接收郵件出錯:" + e.getMessage() + "</font><br/>");
                receivePane.setText(sff.toString());
                 System.out.println(
    "接收郵件出錯:");
                e.printStackTrace();
                
    return false;
                
            }

            
    return true;
         }

         
         
    private boolean initSession(){
             
    if(MessageDialog.getAccount() != null){
                 accout 
    = MessageDialog.getAccount();
                 Properties props 
    = new Properties(); // 獲取系統(tǒng)環(huán)境
                 props.put("mail.smtp.host", accout.getSendHost());
                 props.put(
    "mail.smtp.auth""true");
                 session 
    = Session.getDefaultInstance(props, null);
                 
    return true;
             }

             
    else{
                 
    return false;
             }

         }

         
         
    private String getFrom(Message mimeMessage) throws Exception {
                InternetAddress[] address 
    = (InternetAddress[]) mimeMessage.getFrom();
                String from 
    = address[0].getAddress();
                
    if (from == null){
                    from 
    = "";
                }

                String personal 
    = address[0].getPersonal();
                
    if (personal == null){
                    personal 
    = "";
                }

                String fromaddr 
    = personal + "&nbsp;&nbsp;&lt;" + from + "&gt;";
                
    return fromaddr;
            }

         
         
    public void getMailContent(Part part, StringBuffer sff) throws Exception {   
                String contenttype 
    = part.getContentType();   
                
    int nameindex = contenttype.indexOf("name");   
                
    boolean conname = false;   
                
    if (nameindex != -1)   
                    conname 
    = true;   
                System.out.println(
    "CONTENTTYPE: " + contenttype);   
                
    if (part.isMimeType("text/plain"&& !conname) {   
                    sff.append((String) part.getContent());   
                }
     else if (part.isMimeType("text/html"&& !conname) {   
                    sff.append((String) part.getContent());   
                }
     else if (part.isMimeType("multipart/*")) {   
                    Multipart multipart 
    = (Multipart) part.getContent();   
                    
    int counts = multipart.getCount();   
                    
    for (int i = 0; i < counts; i++{   
                        getMailContent(multipart.getBodyPart(i), sff);   
                    }
       
                }
     else if (part.isMimeType("message/rfc822")) {   
                    getMailContent((Part) part.getContent(), sff);   
                }
     else {}   
            }
       
    }

    下面看效果,例子是用了QQ郵箱和網(wǎng)易郵箱測試。QQ郵箱在win 7系統(tǒng)使用,網(wǎng)易郵箱在Ubuntu使用
    程序運行時,先點擊“配置”按鈕配置郵件服務(wù)器和帳號信息,配置完后保存,再點登錄,如果配置沒有填錯的話,就可以正常的收發(fā)信息。


    QQ郵箱


    163郵箱


    用這個客戶端工具跑了一段時間,個人感覺還是不錯。唯一不足就是跑了一個小時后,163郵箱出現(xiàn)登錄失敗的情況,估計是服務(wù)器端設(shè)了限制,禁止客戶端連續(xù)不斷的訪問郵箱。
    運行程序:im.jar.rar

    評論

    # re: 基于郵件服務(wù)器的聊天測試  回復(fù)  更多評論   

    2010-12-11 08:33 by 餓了否訂餐網(wǎng)
    這么做不會被服務(wù)器拒收 ? 大量聊天的話肯定不行
    除非自己架設(shè) 郵件服務(wù)器 還得關(guān)閉垃圾郵件防護

    # re: 基于郵件服務(wù)器的聊天測試  回復(fù)  更多評論   

    2010-12-11 08:35 by 餓了否訂餐網(wǎng)
    不過界面做的可以

    # re: 基于郵件服務(wù)器的聊天測試  回復(fù)  更多評論   

    2010-12-11 10:53 by pengo
    @餓了否訂餐網(wǎng)
    呵呵,QQ郵箱跑了一個小時也沒有問題,要看郵件服務(wù)器有沒作了限制,如果沒有作限制,可以直接聊天。界面只是直接用windowbuilder拖拉控件弄出來的,用了JDK自帶的NimbusLookAndFeel皮膚。

    # re: 基于郵件服務(wù)器的聊天測試  回復(fù)  更多評論   

    2010-12-12 17:08 by 紫砂壺
    這個牛,有空也研究一下

    # re: 基于郵件服務(wù)器的聊天測試  回復(fù)  更多評論   

    2010-12-13 12:36 by pandora jewelry
    其中hsqldb和hibernate都是從jbpm4.4的lib文件夾里面拷過去的as

    # re: 基于郵件服務(wù)器的聊天測試  回復(fù)  更多評論   

    2010-12-13 12:37 by pandora jewelry
    其中hsqldb和hibernate都是從jbpm4.4的lib文件夾里面拷過去的ed

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


    網(wǎng)站導(dǎo)航:
     
    主站蜘蛛池模板: 亚洲日韩在线观看免费视频| 毛片免费视频播放| 999任你躁在线精品免费不卡| 最近中文字幕2019高清免费| 成人免费视频77777| 日本一线a视频免费观看| AV在线亚洲男人的天堂| 亚洲AV无码精品无码麻豆| 亚洲视频免费在线看| 亚洲精品无码成人片久久不卡| 人成电影网在线观看免费| 久草福利资源网站免费| 成人黄页网站免费观看大全| 亚洲国产成人久久一区久久| 色噜噜综合亚洲av中文无码| 亚洲国产精品成人AV在线| 国内精品免费久久影院| www.999精品视频观看免费| mm1313亚洲精品无码又大又粗| 国产精品偷伦视频免费观看了| 久久99热精品免费观看动漫| 啦啦啦在线免费视频| 国产成人综合亚洲AV第一页| 亚洲冬月枫中文字幕在线看| 人妻仑刮八A级毛片免费看| 69视频在线观看免费| 亚洲 无码 在线 专区| 亚洲高清中文字幕| 污视频网站免费观看| 1000部啪啪未满十八勿入免费| 国产jizzjizz视频免费看| 亚洲日韩图片专区第1页| 美国毛片亚洲社区在线观看 | a级午夜毛片免费一区二区| 四虎1515hh永久久免费| 亚洲国产高清在线一区二区三区| 亚洲电影唐人社一区二区| 一个人免费观看日本www视频| 999国内精品永久免费视频| 国产AV无码专区亚洲AWWW| 日韩亚洲不卡在线视频中文字幕在线观看 |