📄 pop3store.java
字号:
/*
* POP3Store.java
*
* Copyright (C) 1998-2000 FreeBeans <freebeans@mub.biglobe.ne.jp>
*
* 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; either version 2
* of the License, or (at your option) any later version.
*
* 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.
*
* Copyright (C) 1998-2000擭 FreeBeans <freebeans@mub.biglobe.ne.jp>
*
* 杮僾儘僌儔儉偼僼儕乕丒僜僼僩僂僃傾偱偡丅偁側偨偼丄Free Software Foundation
* 偑岞昞偟偨GNU 堦斒岞桳巊梡嫋戻偺乽僶乕僕儑儞俀乿埥偄偼偦傟埲崀偺奺僶乕僕儑
* 儞偺拞偐傜偄偢傟偐傪慖戰偟丄偦偺僶乕僕儑儞偑掕傔傞忦崁偵廬偭偰杮僾儘僌儔儉
* 傪嵞斝晍傑偨偼曄峏偡傞偙偲偑偱偒傑偡丅
* 杮僾儘僌儔儉偼桳梡偲偼巚偄傑偡偑丄斝晍偵偁偨偭偰偼丄巗応惈媦傃摿掕栚揑揔崌
* 惈偵偮偄偰偺埫栙偺曐徹傪娷傔偰丄偄偐側傞曐徹傕峴側偄傑偣傫丅徻嵶偵偮偄偰偼
* GNU 堦斒岞桳巊梡嫋戻彂傪偍撉傒偔偩偝偄丅
*
* 偁側偨偼丄杮僾儘僌儔儉偲堦弿偵GNU 堦斒岞桳巊梡嫋戻偺幨偟傪庴偗庢偭偰偄
* 傞偼偢偱偡丅偦偆偱側偄応崌偼丄Free Software Foundation, Inc., 675 Mass Ave,
* Cambridge, MA 02139, USA 傊庤巻傪彂偄偰偔偩偝偄丅
*/
package jp.gr.java_conf.roadster.net.pop;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;
import java.util.BitSet;
import java.util.Enumeration;
import java.util.Hashtable;
import java.util.StringTokenizer;
import java.util.Vector;
import javax.mail.Flags;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import javax.mail.event.StoreEvent;
import javax.mail.internet.MimeMessage;
/**
* POP3Store 僋儔僗.
*
* POP3僒乕僶偐傜偺儊僢僙乕僕庴怣張棟傪峴偆.
*
* POP3Store 偺摦嶌偼丄埲壓偺僾儘僷僥傿偱惂屼偱偒傞.
* <table BORDER="1">
* <th>僾儘僷僥傿柤</th>
* <th>宆</th>
* <th>愢柧</th>
* <th>僨僼僅儖僩抣</th>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.rootDirectory</code></td>
* <td><code>String</code></td>
* <td>僒乕僶偐傜庴怣偟偨儊僢僙乕僕傪曐懚偡傞僨傿儗僋僩儕</td>
* <td>僇儗儞僩僨傿儗僋僩儕.(System.getProperty("user.dir"))</td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.authMode</code></td>
* <td><code>String</code></td>
* <td>POP3擣徹儌乕僪丄NORMAL 傑偨偼 APOP 傪巜掕偡傞.</td>
* <td>NORMAL</td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.receivingFolder</code></td>
* <td><code>String</code></td>
* <td>僒乕僶偐傜庴怣偟偨儊僢僙乕僕偑奿擺偝傟傞僼僅儖僟柤.
* <td>INBOX</td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.checkInterval</code></td>
* <td><code>int</code></td>
* <td>僒乕僶忋偺儊僢僙乕僕傪掕婜揑偵僠僃僢僋偡傞娫妘.乮扨埵丗暘乯<BR>
* 偙偺僾儘僷僥傿偵 0 傪巜掕偟偨応崌偵偼掕婜揑側僠僃僢僋偼峴傢側偄.</td>
* <td>10</td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.leaveOnServer</code></td>
* <td><code>boolean</code></td>
* <td>庴怣嵪傒偟偨儊僢僙乕僕傪丄僒乕僶忋偵巆偡偐巜掕偡傞.<br>
* false傪巜掕偟偨応崌丄庴怣偟偨儊僢僙乕僕偼僒乕僶忋偐傜嶍彍偝傟傞丅</td>
* <td><code>true</code></td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.checkActions</code></td>
* <td><code>String</code></td>
* <td>僒乕僶偐傜儊僢僙乕僕傪庴怣偡傞僞僀儈儞僌.埲壓偺抣偑巜掕壜擻.<BR>
* <TABLE BORDER>
* <TR>
* <td><init></td><td>Folder 僆僽僕僃僋僩偑嶌惉偝傟偨帪揰.<B>悇彠偝傟側偄</B></td>
* </TR>
* <TR>
* <td>open</td><td>Folder.open() 儊僜僢僪偑屇傃弌偝傟偨帪揰.</td>
* </TR>
* <TR>
* <td>hasNewMessages</td><td>Folder.hasNewMessages() 偑屇傃弌偝傟偨帪揰.</td>
* </TR>
* </TABLE>
* 暋悢巜掕偡傞応崌偵偼僇儞儅 (,) 偱嬫愗偭偰巜掕偡傞.<BR>
* 椺乯<init>,hasNewMessages
* </td>
* <td>
* open,hasNewMessages
* </td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.receiveImmediatery</code></td>
* <td><code>boolean</code>
* <td>忋婰checkActions偱巜掕偟偨儊僜僢僪偑屇傃弌偝傟偨帪揰偱丄偡偖偵儊僢僙乕僕傪庴怣偡傞偐傪巜掕偡傞.<BR>
* true 傪巜掕偟偨応崌丄儊僜僢僪偑儕僞乕儞偟偨帪揰偱儊僢僙乕僕偺庴怣偼姰椆偟偰偄傞.<BR>
* false 傪巜掕偟偨応崌丄儊僢僙乕僕偺僟僂儞儘乕僪偼僶僢僋僌儔僂儞僪偱峴傢傟傞.
* </td>
* <td>
* <code>false</code>
* </td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.listHiddenFolders</code></td>
* <td><code>boolean</code></td>
* <td>塀偟僨傿儗僋僩儕傪儕僗僩傾僢僾偡傞偐傪巜掕偡傞丅<code>true</code>偑巜掕偝傟偨応崌丄塀偟僨傿儗僋僩儕傕儕僗僩傾僢僾偡傞丅
* 偙偺僾儘僷僥傿偼幚峴娐嫬偑Java2埲崀偱側偄偲柍帇偝傟丄JDK1.1憡摉偺娐嫬偱偼忢偵 true 偲側傞丅</td>
* <td><code>false</code></td>
* </tr>
*
* <tr>
* <td><code>jp.gr.java_conf.roadster.net.pop.timeout</code></td>
* <td><code>int</code></td>
* <td><code>Socket</code>偺僞僀儉傾僂僩帪娫傪儈儕昩偱巜掕偡傞丅侽傪巜掕偟偨応崌偵偼僞僀儉傾僂僩偟側偄丅</td>
* <td><code>0</code></td>
* </tr>
*
* </table>
*/
public class POP3Store extends Store {
/**
* INBOX 僼僅儖僟偺柤徧.(=INBOX)
*/
private static final String INBOX_NAME = "INBOX";
/**
* UID儕僗僩僼傽僀儖偺柤慜.(=uidl.dat)
*/
protected static final String UIDL_FILENAME = "uidl.dat";
/**
* 僾儘僷僥傿偺婎弨柤.(jp.gr.java_conf.roadster.net.pop)
*/
public static final String BASE_PROPERTY = "jp.gr.java_conf.roadster.net.pop.";
/**
* 儖乕僩僨傿儗僋僩儕傪巜掕偡傞僾儘僷僥傿柤.
*/
public static final String ROOTDIRECTORY_PROPERTY = BASE_PROPERTY + "rootDirectory";
/**
* 庴怣偟偨儊僢僙乕僕傪嶍彍偡傞偐傪巜掕偡傞僾儘僷僥傿柤.
* "true" | "false" 偱巜掕偡傞.
*/
public static final String LEAVE_ON_SERVER_PROPERTY = BASE_PROPERTY + "leaveOnServer";
/**
* 儊僢僙乕僕庴怣僼僅儖僟柤傪巜掕偡傞僾儘僷僥傿柤.
*/
public static final String RECEIVING_FOLDER_PROPERTY = BASE_PROPERTY + "receivingFolder";
/**
* 儊僢僙乕僕偺庴怣傪峴偆儊僜僢僪傪巜掕偡傞僾儘僷僥傿柤.
*/
public static final String CHECK_ACTION_PROPERTY = BASE_PROPERTY + "checkActions";
/**
*
*/
protected static final String RECEIVE_IMMEDIATERY_PROPERTY = BASE_PROPERTY + "receiveImmediatery";
/**
* 僾儘僷僥傿 CHECK_ACTION_PROPERTY 偵巜掕偡傞抣.
* Folder僆僽僕僃僋僩偑嶌惉偝傟偨帪揰偱丄僒乕僶偐傜儊僢僙乕僕傪庴怣偡傞.
*/
protected static final String RECEIVING_ACTION_INIT = "<init>";
/**
* 僾儘僷僥傿 CHECK_ACTION_PROPERTY 偵巜掕偡傞抣.
* Folder.open() 偑屇傃弌偝傟偨帪揰偱丄僒乕僶偐傜儊僢僙乕僕傪庴怣偡傞.
*/
protected static final String RECEIVING_ACTION_OPEN = "open";
/**
* 僾儘僷僥傿 CHECK_ACTION_PROPERTY 偵巜掕偡傞抣.
* Folder.hasNewMessages() 偑屇傃弌偝傟偨帪揰偱丄僒乕僶偐傜儊僢僙乕僕傪庴怣偡傞.
*/
protected static final String RECEIVING_ACTION_HASNEWMESSAGES = "hasNewMessages";
/**
* 僒乕僶忋儊僢僙乕僕偺僠僃僢僋娫妘傪巜掕偡傞僾儘僷僥傿柤.
* 惓偺惍悢偱巜掕偡傞. 0 偺応崌偵偼掕婜揑偵庴怣傪峴傢側偄.
*/
public static final String INTERVAL_PROPERTY = BASE_PROPERTY + "checkInterval";
/**
* 僆僼儔僀儞儌乕僪傪巜掕偡傞僾儘僷僥傿柤.
* "true" | "false" 偱巜掕偡傞.
*/
public static final String OFFLINEMODE_PROPERTY = BASE_PROPERTY + "offline";
/**
* 擣徹儌乕僪傪巜掕偡傞僾儘僷僥傿柤.
* 抣偼 "NORMAL" 傑偨偼 "APOP" 傪巜掕偡傞.
*/
public static final String AUTHMODE_PROPERTY = BASE_PROPERTY + "authMode";
/**
* 僾儘僷僥傿 AUTHMODE_PROPERTY 偵巜掕偡傞抣.
* 捠忢偺擣徹(USER/PASS 僐儅儞僪偵傛傞擣徹乯傪峴偆応崌偵巜掕偡傞.
*/
private static final String NORMAL_AUTH = "NORMAL";
/**
* 僾儘僷僥傿 AUTHMODE_PROPERTY 偵巜掕偡傞抣.
* APOP偵傛傞擣徹傪峴偆応崌偵巜掕偡傞.
*/
private static final String APOP_AUTH = "APOP";
/**
* 塀偟僼傽僀儖傪儕僗僩昞帵偡傞偐傪巜掕偡傞僾儘僷僥傿柤丅
* "true" | "false" 偱巜掕偡傞丅僨僼僅儖僩偼 false 偩偑丄Java2埲崀偱柍偄偲婡擻偟側偄丅
*/
public static final String LIST_HIDDEN_FOLDERS_PROPERTY = BASE_PROPERTY + "listHiddenFolders";
/**
* 愙懕僞僀儉傾僂僩帪娫傪巜掕偡傞僾儘僷僥傿丅int 偱巜掕偡傞丅
* 僨僼僅儖僩偼侽
*/
public static final String TIMEOUT_PROPERTY = BASE_PROPERTY + "timeout";
/**
* POP3Client.
* 偙偺僋儔僗傪梡偄偰僒乕僶偲捠怣偟丄儊僢僙乕僕傪庴怣偡傞.
*/
protected POP3Client client;
/**
* UID儕僗僩.庴怣嵪傒儊乕儖偺 UID 偑奿擺偝傟偰偄傞.
* 偙偺儕僗僩傪尦偵僒乕僶偐傜庢摼偡傋偒儊僢僙乕僕傪寛掕偡傞.
*/
protected Vector uidList;
/**
* 儖乕僩僨傿儗僋僩儕.
* 偙偺僨傿儗僋僩儕攝壓偵儊乕儖偑曐懚偝傟傞.
* 僨僼僅儖僩偱偼丄System.getProperty("user.dir") 偲側傞.
*/
protected File rootDirectory = new File(System.getProperty("user.dir"));
/**
* 庴怣偟偨儊僢僙乕僕傪僒乕僶忋偵曐懚偡傞偐.
* 僨僼僅儖僩偱偼 true.
*/
protected boolean leaveOnServer = true;
/**
* 捈偪偵儊僢僙乕僕傪僟僂儞儘乕僪偡傞偐.
*/
protected boolean receiveImmediatery = false;
/**
* 僒乕僶忋偺儊僢僙乕僕傪僠僃僢僋偡傞娫妘乮儈儕昩扨埵乯
* 僨僼僅儖僩抣偼侾侽暘.<BR>
* 僾儘僷僥傿偱曄峏壜擻偱偁傞.乮愝掕扨埵偼暘乯
*/
protected long checkInterval;
protected static final long DEFAULT_CHECK_INTERVAL = 10L * 60L* 1000L;
/**
* 僆僼儔僀儞儌乕僪偱摦嶌偡傞偐.
* 僨僼僅儖僩偱偼 false.
*/
protected boolean offlineMode = false;
/**
* 擣徹儌乕僪. 僨僼僅儖僩偼 NORMAL.
*/
protected String authMode = NORMAL_AUTH;
/**
* 塀偟僨傿儗僋僩儕傪儕僗僩昞帵偡傞偐丅僨僼僅儖僩抣偼 false丅
* 偙偺僆僾僔儑儞偼丄Java2埲崀偱柍偄偲婡擻偟側偄丅乮JDK1.1偱偼丄忢偵 true 偲傒側偝傟傞乯
*/
protected boolean listHiddenFolders = false;
/**
* 僞僀儉傾僂僩帪娫乮扨埵丗儈儕昩乯
*/
protected int timeout = 0;
/**
* 僒乕僶偐傜庴怣偟偨儊僢僙乕僕傪奿擺偡傞僼僅儖僟柤.
* 僨僼僅儖僩偱偼 "INBOX".
*/
protected String receivingFolderName = INBOX_NAME;
/**
* 儊僢僙乕僕偺庴怣傪奐巒偡傞摦嶌.
*/
protected Vector checkActions = new Vector();
/**
* UIDL僼傽僀儖.
*/
protected File uidlFile;
/**
* 儅僗僞僼僅儖僟.
*/
protected Hashtable masterFolders = new Hashtable();
/**
* 儊僢僙乕僕庴怣僗儗僢僪.
*/
protected MessageReceiver receiver;
/**
* 僒乕僶忋偺儊僢僙乕僕傪掕婜揑偵僠僃僢僋偡傞僗儗僢僪.
*/
protected IntervalTimer timerThread;
/**
* localstore 傪巜掕偡傞僷儔儊乕僞僉乕.
*/
private static final String LOCALSTORE_KEY = "localstore";
/**
* authmode 傪巜掕偡傞僷儔儊乕僞僉乕.
*/
private static final String AUTHMODE_KEY = "authmode";
/**
* 僐儞僗僩儔僋僞.
* 偙偺僐儞僗僩儔僋僞偼 protected 偱偼摦嶌偟側偄.
* 昁偢 public 偵偡傞昁梫偑偁傞.
*
* @param session 偙偺Store偺偨傔偺僙僢僔儑儞僆僽僕僃僋僩.
* @param url 偙偺Store偱巊梡偝傟傞 URLName 僆僽僕僃僋僩.
*/
public POP3Store(Session session, URLName urlname) {
super(session, urlname);
initStore(urlname);
}
/**
* POP3僒乕僶偵愙懕偡傞.
* 愙懕屻丄僒乕僶偐傜偼偡偖偵愗抐偟丄昁梫偵側偭偨応崌偵嵞愙懕偡傞.
*
* @param host 儂僗僩柤.
* @param port 億乕僩斣崋.
* @param username 儐乕僓柤.
* @param password 僷僗儚乕僪.
*
* @return 惓忢偵愙懕弌棃偨応崌偼 true. 儐乕僓擣徹偵幐攕偟偨応崌偼 false.
* @exception javax.mail.MessagingException 儐乕僓擣徹埲奜偺尨場偱愙懕偵幐攕偟偨応崌.
*/
protected boolean protocolConnect(String host, int port, String user, String password) throws MessagingException {
try {
if (! offlineMode) {
// POP3Client 傪嶌惉偡傞.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -