基于邮件服务器的聊天测试——————代码示例

现在的邮件服务提供商很多,而且邮箱的速度也很不错,相互之间也能互发信息,基于邮件服务器进行信息聊天,应该也不错。写个简易版的客户端工具测试下。
本文只做了纯文本内容的发送测试,图片和附件的没做。
功能实现的原理很简单:
客户端信息发送(邮件发送):和普通的smtp发送邮件一样。
客户端信息接收(邮件接收):因为要马上看到信息内容,所以需要用一个线程,死循环的不断登录邮箱收邮件。
代码实现也很简单,只是收发邮件的代码,这里不详说。
收发邮件的组件是javaMail,界面是swing做的。

收发信息实现类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(
" 即时信息回复 " );   
                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 " 发送出错: "   +  ex.getMessage());
                System.out.println(
" 发送邮件出错: " );
                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(),  110 null ,  
                         accout.getName(), accout.getPassword());  
                  store 
=  session.getStore(urln);
                  store.connect();
             }

             Folder folder 
=  store.getFolder( " INBOX " );
             folder.open(Folder.READ_ONLY);
             System.out.println(
" 邮件数: "   +  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(
" 符合条件邮件数: "   +  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();  //  获取系统环境
             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邮箱和网易邮箱测试。QQ邮箱在win 7系统使用,网易邮箱在Ubuntu使用
程序运行时,先点击“配置”按钮配置邮件服务器和帐号信息,配置完后保存,再点登录,如果配置没有填错的话,就可以正常的收发信息。
</div></body></html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值