📄 pop3store.java
字号:
client.setPassword(password);
//延迟连接
// client.connect();
}
// MessageReceiver ꆼꆼꆼꆼꆼꆼ.
if (offlineMode) {
receiver = new OfflineMessageReceiver();
} else if (receiveImmediatery) {
receiver = new DefaultMessageReceiver(client);
} else {
receiver = new BackgroundMessageReceiver(new DefaultMessageReceiver(client));
((BackgroundMessageReceiver) receiver).start();
}
return true;
} finally {
try {
if (client != null) {
client.disconnect(); // ꆼꆼꆼꆼꆼꆼꆼ.
}
} catch (IOException ioe) {
debugOut("POP3Store.protocolConnect():" + ioe);
ioe.printStackTrace();
}
}
}
/**
* ꆼꆼꆼꆼꆼꆼ.
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* @throws MessagingException ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*/
public synchronized void close() throws MessagingException {
try {
if (receiver != null) {
if (receiver instanceof BackgroundMessageReceiver) {
((BackgroundMessageReceiver) receiver).stopReceiving();
}
receiver = null;
}
timerThread = null; // ꆼꆼꆼꆼꆼꆼꆼꆼ. ꆼꆼꆼꆼꆼꆼꆼ POP3Folder.isConnected() == false ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
MessageIndex.saveAll();
} catch (IOException ioe) {
ioe.printStackTrace();
} finally {
super.close();
debugOut("POP3Store.close():closed.");
}
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* ꆼꆼꆼꆼꆼꆼꆼꆼPOP3DefaultFolder ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* @return ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼ POP3DefaultFolderꆼꆼꆼꆼꆼꆼꆼ.
* @throws MessagingException ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*/
public synchronized Folder getDefaultFolder() throws MessagingException {
return getFolder("");
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* POP3Store ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* JavaMailꆼꆼꆼꆼꆼꆼꆼFolder ꆼꆼꆼꆼꆼꆼꆼStoreꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ Folder ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* @param name ꆼꆼꆼꆼꆼꆼꆼ.ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ."INBOX" ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* POP3Storeꆼꆼꆼ"" ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* @return ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* @exception javax.mail.MessagingException ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* @exception java.lang.IllegalStateException ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*/
public Folder getFolder(String name) throws MessagingException {
if (! isConnected()) {
throw new IllegalStateException("Not connected");
}
if (name.startsWith("/")) {
name = name.substring(1);
}
if (name.equalsIgnoreCase(INBOX_NAME)) {
name = INBOX_NAME;
}
POP3Folder folder = null;
synchronized (masterFolders) {
POP3Folder masterfolder = null;
Enumeration e = masterFolders.keys();
while (e.hasMoreElements()) { // ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String mastername = (String) e.nextElement();
if (name.equalsIgnoreCase(mastername)) {
masterfolder = (POP3Folder) masterFolders.get(mastername);
name = mastername; // ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
}
}
if (name.equals("")) {
folder = new POP3DefaultFolder(this);
} else {
folder = new POP3Folder(this, name);
}
if (masterfolder == null) {
masterfolder = folder;
masterFolders.put(name, masterfolder);
}
}
return folder;
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* ꆼꆼꆼꆼgetFolder(url.getFile()) ꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* @param url ꆼꆼꆼꆼꆼꆼꆼ.
* @exception javax.mail.MessagingException.
* @exception java.lang.IllegalStateException ꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*/
public Folder getFolder(URLName url) throws MessagingException {
return getFolder(url.getFile());
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ protected ꆼꆼꆼꆼ.
*
* @param type ꆼꆼꆼꆼꆼꆼꆼꆼꆼ
* @param message ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
*/
protected void notifyStoreListeners(int type, String message) {
super.notifyStoreListeners(type, message);
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
*/
protected void finalize() throws Throwable {
try {
if (isConnected()) {
close();
}
} finally {
super.finalize();
}
}
// ꆼꆼꆼꆼꆼ POP3Store ꆼꆼꆼꆼꆼꆼꆼ
/**
* ꆼꆼꆼꆼꆼꆼ.
* debug ꆼꆼꆼꆼꆼꆼ true ꆼꆼꆼꆼꆼꆼ System.err ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* @param msg ꆼꆼꆼꆼꆼꆼꆼ.
*/
protected void debugOut(String msg) {
if (debug) {
StringBuffer sb = new StringBuffer("DEBUG:");
sb.append(msg);
System.err.println(sb.toString());
}
}
/**
* Store ꆼꆼꆼꆼꆼꆼ.
*/
private void initStore(URLName urlname) {
// initShutdownHook();
loadProperties();
loadParameters(urlname);
loadUIDL();
// rootꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
if (! getRootDirectory().exists()) {
getRootDirectory().mkdirs();
}
// INBOX ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
File inboxFolder = new File(rootDirectory, INBOX_NAME);
if (! inboxFolder.exists()) {
inboxFolder.mkdirs();
}
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
*/
private void initShutdownHook() {
try {
Class[] paramClass = new Class[1];
paramClass[0] = Thread.class;
Method method = Runtime.class.getMethod("addShutdownHook", paramClass);
Runtime runtime = Runtime.getRuntime();
Object[] param = new Object[1];
param[0] = new Thread() {
public void run() {
try {
debugOut("POP3Store shutdown now");
close();
} catch (MessagingException me) {
me.printStackTrace();
}
}
};
method.invoke(runtime, param);
} catch (IllegalAccessException iae) {
iae.printStackTrace();
debugOut("POP3Store.initShutodownHook:IllegalAccessException:" + iae);
} catch (NoSuchMethodException nsme) { // JDK1.3 ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼaddShutdownHook ꆼꆼꆼꆼꆼꆼꆼ
// nsme.printStackTrace();
debugOut("POP3Store.initShutdownHook:NoSuchMethodException:" + nsme);
} catch (InvocationTargetException ite) {
Throwable t = ite.getTargetException();
if (t instanceof Error) {
throw (Error) t; // ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
} else if (t instanceof Exception) {
debugOut("POP3Store.initShutdownHook:InvocationTergetException:targetException:" + t);
}
}
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*/
private void loadProperties() {
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String root = session.getProperty(ROOTDIRECTORY_PROPERTY);
if (root == null) {
rootDirectory = new File(System.getProperty("user.dir"));
} else {
rootDirectory = new File(root);
}
debugOut(ROOTDIRECTORY_PROPERTY + "=" + rootDirectory.getAbsolutePath());
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String interval = session.getProperty(INTERVAL_PROPERTY);
if (interval == null) {
checkInterval = DEFAULT_CHECK_INTERVAL;
} else {
checkInterval = Long.parseLong(interval) * 1000L * 60L; // ꆼꆼꆼꆼꆼꆼꆼꆼ.
}
debugOut(INTERVAL_PROPERTY + "=" + checkInterval + " (ms)");
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String los = session.getProperty(LEAVE_ON_SERVER_PROPERTY);
if (los == null) {
leaveOnServer = true;
} else {
leaveOnServer = Boolean.valueOf(los).booleanValue();
}
debugOut(LEAVE_ON_SERVER_PROPERTY + "=" + leaveOnServer);
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String off = session.getProperty(OFFLINEMODE_PROPERTY);
if (off == null) {
offlineMode = false;
} else {
offlineMode = Boolean.valueOf(off).booleanValue();
}
debugOut(OFFLINEMODE_PROPERTY + '=' + offlineMode);
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String auth = session.getProperty(AUTHMODE_PROPERTY);
if (auth == null) {
authMode = NORMAL_AUTH;
} else {
authMode = auth.toUpperCase();
}
debugOut(AUTHMODE_PROPERTY + '=' + authMode);
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String fname = session.getProperty(RECEIVING_FOLDER_PROPERTY);
if (fname == null) {
receivingFolderName = INBOX_NAME;
} else {
receivingFolderName = fname;
}
debugOut(RECEIVING_FOLDER_PROPERTY + '=' + receivingFolderName);
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String actns = session.getProperty(CHECK_ACTION_PROPERTY);
if (actns == null) {
checkActions.addElement(RECEIVING_ACTION_OPEN);
checkActions.addElement(RECEIVING_ACTION_HASNEWMESSAGES);
} else {
StringTokenizer tokenizer = new StringTokenizer(actns.trim(), ",");
while (tokenizer.hasMoreTokens()) {
checkActions.addElement(tokenizer.nextToken());
}
}
Enumeration e = checkActions.elements();
actns = "";
while (e.hasMoreElements()) {
actns += (String) e.nextElement() + ",";
}
debugOut(CHECK_ACTION_PROPERTY + '=' + actns);
actns = null;
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
String im = session.getProperty(RECEIVE_IMMEDIATERY_PROPERTY);
if (im == null) {
receiveImmediatery = false;
} else {
receiveImmediatery = Boolean.valueOf(im).booleanValue();
}
debugOut(RECEIVE_IMMEDIATERY_PROPERTY + '=' + receiveImmediatery);
// ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
String lhf = session.getProperty(LIST_HIDDEN_FOLDERS_PROPERTY);
if (lhf == null) {
listHiddenFolders = false;
} else {
listHiddenFolders = Boolean.valueOf(lhf).booleanValue();
}
// File.isHidden() ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
// isHiddenꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
if (! SubFolderFilter.isHiddenMethodSupported()) {
debugOut("WARNING:" + LIST_HIDDEN_FOLDERS_PROPERTY + " not supported because method File.isHidden() not exists, ignored.");
}
debugOut(LIST_HIDDEN_FOLDERS_PROPERTY + '=' + listHiddenFolders);
// Socketꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
String to = session.getProperty(TIMEOUT_PROPERTY);
if (to == null) {
timeout = 0;
} else {
timeout = Integer.parseInt(to);
}
debugOut(TIMEOUT_PROPERTY + '=' + timeout);
}
/**
* URLNameꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* @param urlname URLName.
*/
private void loadParameters(URLName urlname) {
Hashtable options = parseParameters(urlname);
Enumeration e = options.keys();
debugOut("POP3Store.loadParameters(): parameter loading...");
String params = "";
while (e.hasMoreElements()) {
String key = (String) e.nextElement();
String value = (String) options.get(key);
if (params.length() > 0) {
params += ',';
}
params += key + '=' + value;
}
debugOut(params);
String rd = (String) options.get(LOCALSTORE_KEY);
if (rd != null) {
rootDirectory = new File(rd);
debugOut("rootDirectory has changed to " + rootDirectory);
}
String am = (String) options.get(AUTHMODE_KEY);
if (am != null) {
authMode = am;
debugOut("authMode has changed to " + authMode);
}
if(options.get(SSL_KEY) != null){
ssl=true;
debugOut("ssl has changed to true");
}
//增加对leaveOnServer的覆盖
if(options.get(leaveOnServer) != null){
leaveOnServer= Boolean.valueOf((String)options.get("leaveOnServer"));
debugOut("leaveOnServer has changed to " + leaveOnServer);
}
debugOut("POP3Store.loadParameters(): done.");
}
/**
* ꆼꆼꆼꆼꆼURLNameꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*
* @param urlname ꆼꆼꆼꆼꆼꆼꆼ URLName.
* @return ꆼꆼꆼꆼꆼꆼꆼꆼꆼ Hashtable.
*/
private Hashtable parseParameters(URLName urlname) {
Hashtable options = new Hashtable();
String optstr = urlname.getFile();
if (optstr != null) {
final int startpos = optstr.indexOf('?');
if (startpos != -1 && startpos < optstr.length() - 1) {
optstr = optstr.substring(startpos + 1);
StringTokenizer st = new StringTokenizer(optstr, "&");
while (st.hasMoreTokens()) {
String pair = st.nextToken();
int eqpos = pair.indexOf('=');
String lvalue = (eqpos != -1) ? pair.substring(0, eqpos) : null;
String rvalue = (eqpos != -1 && eqpos < pair.length() - 1) ? pair.substring(eqpos + 1) : null;
if (lvalue != null) {
options.put(lvalue, rvalue);
}
}
}
}
return options;
}
/**
* UIDLꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
*/
private void loadUIDL() {
uidlFile = new File(getRootDirectory(), UIDL_FILENAME);
try {
FileInputStream fis = new FileInputStream(uidlFile);
BufferedInputStream bis = new BufferedInputStream(fis, 16 * 1024);
ObjectInputStream ois = new ObjectInputStream(bis);
uidList = (Vector) ois.readObject();
ois.close();
} catch (FileNotFoundException fnfe) {
String dbgmsg = "UIDL file " + UIDL_FILENAME + " not found.";
debugOut(dbgmsg);
notifyStoreListeners(StoreEvent.NOTICE, dbgmsg);
uidList = new Vector();
} catch (IOException ioe) {
String dbgmsg = "IOException " + ioe;
debugOut(dbgmsg);
notifyStoreListeners(StoreEvent.ALERT, dbgmsg);
uidList = new Vector();
} catch (ClassNotFoundException cnfe) {
String dbgmsg = "ClassNotFoundException " + cnfe;
debugOut(dbgmsg);
notifyStoreListeners(StoreEvent.ALERT, dbgmsg);
uidList = new Vector();
}
}
/**
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ
* ꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼꆼ.
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -