<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

    用javaMail實現對郵件的查找

     

    用javaMail來實現郵件的查找非常的容易,我把自己平時的經驗總結成如下這篇文章,希望對大家能有幫助,同時也希望各位能給
    如下程序多提一些自己的看法:

    下面是本程序的主要框架:
    //|++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


    package webmail.mail.search;


    import javax.mail.*;
    import java.util.Iterator;
    import java.util.Date;
    import java.util.HashSet;
    import java.util.ArrayList;
    import java.util.Calendar;
    import java.util.Properties;
    import javax.mail.internet.*;
    import javax.mail.search.*;

    import webmail.mail.search.PersonalTerm;
    import webmail.mail.search.JAttachTerm;
    import webmail.mail.search.JBodyTerm;

    import webmail.mail.*;
    import webmail.mail.MimeMessageParser;

    /**
     * description: 一個簡單的郵件查找類,用來查找特定主題的郵件,特定日期,或者
     * 是包含有附件的郵件
     * lastmodify: 2004-10-09
     * <p>注: JavaMail API中的javax.mail.search包中的BodyTerm和AttachTerm在使用時
     * 有問題,這里使用我擴展SearchTerm的JBodyTerm和JAttachTerm,同時由于javax.
     * mail.search包中的SubjectTerm取郵件主題直接調用JavaMail的getSubject()方法
     * 這樣得到的結果有時候不正常,可以擴展SearchTerm來定義自己的Term(這個是下
     * 一篇文章要寫的內容)
     * @author wang weiping of BeiJing flow.Inc
     * @version v1.0.1
     */
    public class MessageQuerier {

          private String body = "";
          private ArrayList list = new ArrayList();
          private int comparison = ComparisonTerm.EQ;

          public static final String OR = "or";
          public static final String AND = "and";
         
          //默認構造方法
          public MessageQuerier() {}

          public void setComparison(String string) {
                if (string.equals(">")) {
                      comparison = ComparisonTerm.GE;
                } else if (string.equals("<")) {
                      comparison = ComparisonTerm.LE;
                }
          }

          public int getComparison() {
                return this.comparison;
          }

          /**
           * 根據指定的字符串來查找所有郵件主題中包含此字符串的所有郵件
           * @param subject 郵件主題中所要包含的字符串
           */
          public void setSubject(String subject) {
                SearchTerm subterm = new JSubjectTerm(subject);
                list.add(subterm);
          }
         
          public void setRecipients(String recipients){
                try{
                      SearchTerm rterm = new RecipientTerm   (Message.RecipientType.TO,new InternetAddress(recipients));
                      list.add(rterm);
                }catch(Exception ex){
                      //ignore exception
                      ex.printStackTrace();
                }
          }
         
          public void setRecipientPersons(String recipientPersons){
                SearchTerm rpTerm = new RecipientPersonTerm(recipientPersons);
                list.add(rpTerm);
          }
         
          /**
           * 根據指定的字符串來查找發件人地址中包含此字符串的所有郵件
           * @param from 設置發件人地址中要包含的字符串
           */
          public void setFrom(String from) {
                try {
                      SearchTerm fterm = new FromTerm(new InternetAddress(from));
                      list.add(fterm);
                } catch (Exception ex) {
                      System.err.println("CoffeeWebMail reportException: " + ex.toString());
                      ex.printStackTrace();
                }
          }

          /**
           * Created 2004-10-9
           * 此類用了自定義的查找器PersonalTerm,此類從javax.mail.search.StringTerm
           * 中繼承下來,重寫了StringTerm類的match()方法
           * <p>根據發件人的姓名來查找此發件人發來的所有郵件</p>
           * @param personal 設置發件人的姓名
           */
          public void setPersonal(String personal) {
                try {
                      PersonalTerm pterm = new PersonalTerm(personal);
                      list.add(pterm);
                } catch (Exception ex) {
                      System.err.println("CoffeeWebMail reportException: " + ex.toString());
                      ex.printStackTrace();
                }
          }

          /**
           * Created 2004-10-09
           *
           * 此類用到了自定義的查找器JAttachTerm,此類從javax.mail.search.SearchTerm中
           * 直接繼承下來,重寫了SearchTerm類的match()方法
           * <p>根據是否包含附件來查找匹配的所有郵件</p>
           * @param flag 是否有附件的標志 true or false
           */
          public void setAttachFlag(boolean flag) {
                try {
                      SearchTerm jaterm = new JAttachTerm(flag);
                      list.add(jaterm);
                } catch (Exception ex) {
                      System.err.println("CoffeeWebMail reportException: " + ex.toString());
                      ex.printStackTrace();
                }
          }


          /**
           * Created 2004-10-09
           *
           * 根據給定的字符串來查找郵件正文中包含此字符串的所有郵件
           * @param pattern 郵件正文要包含的字符串
           */
          public void setBodyText(String pattern) {
                SearchTerm jbterm = new JBodyTerm(pattern);
                list.add(jbterm);
          }


          // note: The dateFormat is <yyyy-MM-dd> eg: [2004-7-10]
          public void setReceiveDate(String date) {
                int comparison = getComparison();
                Date recdate = null;
                try {
                      recdate = getSearchDate(date);
                      SearchTerm recterm = new ReceivedDateTerm(comparison, recdate);
                      list.add(recterm);
                } catch (Exception ex) {
                      System.err.println("CoffeeWebMail reportException: " + ex.toString());
                      ex.printStackTrace();
                }
          }

          public void setSentDate(String date) {
                int comparison = getComparison();
                Date sentdate = null;
                try {
                      sentdate = getSearchDate(date);
                      SearchTerm recterm = new SentDateTerm(comparison, sentdate);
                      list.add(recterm);
                } catch (Exception ex) {
                      System.err.println("CoffeeWebMail reportException: " + ex.toString());
                      ex.printStackTrace();
                }
          }

          /**
           * 返回所有符合搜索條件的郵件數組
           * return all messages that according the searchterm.
           * param--srchmode["and" or "or"]
           * @param folder Folder  要搜索的郵件夾
           * @param srchmode String 搜索模式,搜索模式為其中之一: MessageQuerier.OR or MessageQuerier.AND
           * @return Message[]  符合條件的所有消息數組
           */
          public Message[] getSrchMessages(Folder folder, String srchmode) {
                SearchTerm sterm = null;
                Message[] msgs = null;
            //if(list.size() == 0) return null;
                SearchTerm[] sterms = new SearchTerm[list.size()];
                try {
                      for (int i = 0; i < sterms.length; i++) {
                            sterms[i] = (SearchTerm) list.get(i);
                      }
                      if (sterms.length > 1) {
                            if (srchmode.equals("and")) {
                                  //debug info
                                  //System.out.println("and term :"+sterms.length);
                                  sterm = new AndTerm(sterms);
                            } else if (srchmode.equals("or")) {
                                  sterm = new OrTerm(sterms);
                            }
                      } else if (sterms.length == 1) {
                            //debug info
                            //System.out.println("sterm's length is 1");
                            sterm = sterms[0];
                      }
                      if (sterm == null) msgs = folder.getMessages();
                      else
                    msgs = folder.search(sterm);

                } catch (Exception ex) {
                      System.err.println("CoffeeWebMail reportException: " + ex.toString());
                      ex.printStackTrace();
                }
                return msgs;
          }

          //輔助方法
          private Date getSearchDate(String date) {
                String[] ymd = date.split("-");
                int year, month, day;
                Date srchdate = null;
                try {
                      year = Integer.parseInt(ymd[0]);
                      month = Integer.parseInt(ymd[1]) - 1;
                      day = Integer.parseInt(ymd[2]);
                      Calendar cal = Calendar.getInstance();
                      cal.set(year, month, day);
                      srchdate = cal.getTime();
                } catch (Exception ex) {
                      System.err.println("CoffeeWebMail reportException: " + ex.toString());
                      ex.printStackTrace();
                }
                return srchdate;
          }

          //一個測試代碼
          public static void main(String args[])
              throws Exception {
                String host = "pop.mail.yahoo.com.cn"; //pop.mail.yahoo.com.cn
                String username = "wwp_1124"; //wwp_1124
                String password = "3061643"; // passwd
                Properties props = new Properties();
                Session session = Session.getDefaultInstance(props, null);
                Store store = session.getStore("pop3");
                store.connect(host, username, password);
                Folder folder = store.getFolder("INBOX");
                folder.open(Folder.READ_ONLY);
                MessageQuerier mq = new MessageQuerier();
                //mq.setAttach(true);
                //mq.setAttachFlag(true);
                mq.setFrom("lcd@gxsw.com");
                //mq.setSubject("你好");
                //mq.setBodyText("測試");
                mq.setPersonal("林昌東");
                Message[] msgs = mq.getSrchMessages(folder, MessageQuerier.OR);
                System.out.println(msgs.length);
                for (int i = 0; i < msgs.length; i++) {
                      System.out.println("=====================================>");
                      MimeMessageParser mmp = MimeMessageParser.getMessageParser( (MimeMessage) msgs[i]);
                      System.out.println("sentDate: " + mmp.getSentDate());
                      System.out.println("Subject: " + mmp.getSubject());
                      System.out.println("from: " + mmp.getAddress(AddressType.FROM));
                      System.out.println("personal: " + mmp.getPersonal(AddressType.FROM));
                      //System.out.println("attachFlag: " + mmp.isContainAttach(msgs[i]));
                }
          }
    }


    總結:
         通過看上面這段代碼,相信大家已經對怎樣使用JavaMail API 來進行郵件查找已經
    有了一個大概的了解了吧!在上面的代碼中主要是使用了自己定義的SearchTerm來進行對
    郵件的查找,你可以擴展javax.mail.search包中的SearchTerm來編寫屬于你自己的Term
    歡迎大家提出寶貴意見,我的msn是: coffeecat_1124@hotmail.com

    還有就是我的代碼中引用了MimeMessageParser這個類,這個類的主要作用是用來做郵件
    解析的。在下一篇文章中,我會把MimeMessageParser這個類和其他用到的一些自定義
    的類上傳上去,希望大家可以順利的測試程序代碼,上面的文章只是給出一個思路讓大
    家來參考,希望是來學習思路,而不是直接套用別人的代碼。

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

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


    網站導航:
     
    主站蜘蛛池模板: 午夜网站免费版在线观看| 国产精品亚洲综合专区片高清久久久| 亚洲日韩精品国产3区| 亚洲女人被黑人巨大进入| 亚洲免费在线播放| 国产精品亚洲色图| 91嫩草私人成人亚洲影院| 日韩精品免费一区二区三区| 中文字幕不卡免费高清视频| 亚洲国产成人久久| 伊人亚洲综合青草青草久热| 免费A级毛片无码免费视| 成人爽a毛片免费| 亚洲av无码成人影院一区 | 久久久久亚洲av毛片大| 日韩亚洲国产高清免费视频| 精品免费久久久久国产一区 | 中文字幕一区二区免费| 一本色道久久88亚洲精品综合| 亚洲综合在线另类色区奇米| 成人A级毛片免费观看AV网站| 国产一级a毛一级a看免费视频| 亚洲人成人网站18禁| 婷婷亚洲综合五月天小说| 日本一区二区三区日本免费| 18以下岁毛片在免费播放| 一级毛片在线免费视频| 亚洲一日韩欧美中文字幕在线| 夜夜亚洲天天久久| 中文字幕第一页亚洲| 国产无遮挡吃胸膜奶免费看| 亚洲无砖砖区免费| 久久黄色免费网站| 久久久久久毛片免费看| 菠萝菠萝蜜在线免费视频| 亚洲综合av一区二区三区不卡| 久久久久久久久亚洲| 中文字幕亚洲无线码a| 四虎免费久久影院| 午夜寂寞在线一级观看免费| 亚洲一级免费毛片|