📄 popbox.java
字号:
package mfetcher;//// PopBox//// 27.01.1999 John Mettraux////// Copyright (C) 1999 John Mettraux//// This program is free software; you can redistribute it and/or// modify it under the terms of the GNU General Public License// as published by the Free Software Foundation.//// This program is distributed in the hope that it will be useful,// but WITHOUT ANY WARRANTY; without even the implied warranty of// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the// GNU General Public License for more details.//// You should have received a copy of the GNU General Public License// along with this program; if not, write to the Free Software// Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.//import java.util.*;import java.io.*;public class PopBox extends Thread{//// DATAS public static PrintWriter messageLog = null; private Vector exceptionListeners = new Vector(); private Vector reportListeners = new Vector(); String popServer; String user; String pass; boolean delete; String smtpHost; String[] targets; int messagesFetched; int messagesResent; int targetNb; String version = null;//// CONSTRUCTORS public PopBox (String popServer, String user, String pass, boolean delete, String smtpHost, String[] targets) { super(); this.popServer = popServer; this.user = user; this.pass = pass; this.delete = delete; this.smtpHost = smtpHost; this.targets = targets; messagesFetched = 0; messagesResent = 0; targetNb = 0; }//// PUBLIC METHODS public void addExceptionListener (ExceptionListener el) { exceptionListeners.addElement(el); } public void removeExceptionListener (ExceptionListener el) { exceptionListeners.removeElement(el); } public void addReportListener (ReportListener rl) { reportListeners.addElement(rl); } public void removeReportListener (ReportListener rl) { reportListeners.removeElement(rl); } public void run () { PopFetcher pf = new PopFetcher(popServer, user, pass, 0, delete); // sleep time doesn't matter here if (messageLog != null) { pf.addMessageListener(new MessageListener () { // // each message fetched is resent... public void messageReceived(MessageEvent me) { String from = me.getFrom(); String to = me.getTo(); String subject = me.getSubject(); messageLog.println(user+" from:"+from+" subject:"+subject+" to: "+to); messageLog.flush(); } }); } pf.addMessageListener(new MessageListener () { // // each message fetched is resent... public void messageReceived(MessageEvent me) { String from = me.getFrom(); try { messagesFetched++; SmtpMailer sm = new SmtpMailer(smtpHost, from); //System.out.println("Version = "+version); if (version != null) sm.setVersion(version); sm.sendMail(targets, me.getMessageBody()); targetNb = sm.getTargets(); messagesResent++; } catch (Exception e) { //System.out.println("Exception while fetching... "+e); PopBox.this.processException(e); } } }); pf.setExceptionListener(new ExceptionListener () { public void processException (String account, Exception e) { // // just relaying the exception to upper level // // so account doesn't matter PopBox.this.processException(e); } }); pf.run(); // don't start... just run... the thread here is PopBox itself ! doReport(); } public static PopBox parse (String configurationLine) throws Exception { StringTokenizer st = new StringTokenizer(configurationLine); String _popServer; String _user; String _pass; boolean _delete; String _smtpHost; try { st.nextToken(); // skip 'popserver' _popServer = st.nextToken(); st.nextToken(); // skip 'user' _user = st.nextToken(); st.nextToken(); // skip 'pass' _pass = st.nextToken(); st.nextToken(); // skip 'delete' _delete = st.nextToken().equals("true"); st.nextToken(); // skip 'smtpHost' _smtpHost = st.nextToken(); } catch (Exception e) { throw new Exception("Configuration parsing exception in line :\n"+configurationLine+"\n"+e); } int i = configurationLine.indexOf(" target "); String sTargets = configurationLine.substring(i+8); st = new StringTokenizer(sTargets, "; "); Vector v = new Vector(); while(st.hasMoreTokens()) v.addElement(st.nextToken()); if (v.size() == 0) throw new Exception("No targets in configuration line"); String[] _targets = new String[v.size()]; for (int j=0; j<v.size(); j++) _targets[j] = (String)v.elementAt(j); return new PopBox(_popServer, _user, _pass, _delete, _smtpHost, _targets); } public void setVersion (String version) { this.version = version; } public String getAccount () { return user+"@"+popServer; } //// METHODS private void processException (Exception e) { for (int i=0; i<exceptionListeners.size(); i++) { ExceptionListener el = (ExceptionListener)exceptionListeners.elementAt(i); el.processException(getAccount(), e); } } private void doReport () { for (int i=0; i<reportListeners.size(); i++) { ReportListener rl = (ReportListener)reportListeners.elementAt(i); rl.doReport(getAccount(), messagesFetched, messagesResent, targetNb); } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -