📄 mailplugin.java
字号:
package net.sf.pim.mail;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.mail.Authenticator;
import javax.mail.Folder;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.URLName;
import jp.gr.java_conf.roadster.net.pop.MessageIndex;
import jp.gr.java_conf.roadster.net.pop.POP3Store;
import net.sf.pim.mail.reader.FolderViewer;
import net.sf.util.ConfigHelper;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
/**
* The activator class controls the plug-in life cycle
*/
public class MailPlugin extends AbstractUIPlugin {
// The plug-in ID
public static final String PLUGIN_ID = "net.sf.mywork.mail";
// The shared instance
private static MailPlugin plugin;
//邮件索引
public static final String MAIL_INDEX_FILE = "mail.idx";
//已读索引
public static final String MAIL_READ_FILE="read.idx";
//邮箱
private Store store;
//邮箱名
public static final String INBOX="INBOX";
public static final String OUTBOX="OUTBOX";
public static final String TRASHBOX="TRASHBOX";
public static final String ARCHIEBOX="ARCHIEBOX";
public static final String SEARCHBOX="SEARCHBOX"; //虚拟邮箱
public static final String INBOX_NAME="收件箱";
public static final String OUTBOX_NAME="发件箱";
public static final String TRASHBOX_NAME="垃圾箱";
public static final String ARCHIEBOX_NAME="档案箱";
public static final String SEARCHBOX_NAME="搜索箱"; //虚拟邮箱
private static Map<String,String> folderName;
static{
folderName=new HashMap<String,String>(10);
folderName.put(MailPlugin.INBOX,MailPlugin.INBOX_NAME);
folderName.put(MailPlugin.OUTBOX,MailPlugin.OUTBOX_NAME);
folderName.put(MailPlugin.TRASHBOX,MailPlugin.TRASHBOX_NAME);
folderName.put(MailPlugin.ARCHIEBOX,MailPlugin.ARCHIEBOX_NAME);
folderName.put(MailPlugin.SEARCHBOX,MailPlugin.SEARCHBOX_NAME);
folderName.put(MailPlugin.INBOX_NAME,MailPlugin.INBOX);
folderName.put(MailPlugin.OUTBOX_NAME,MailPlugin.OUTBOX);
folderName.put(MailPlugin.TRASHBOX_NAME,MailPlugin.TRASHBOX);
folderName.put(MailPlugin.ARCHIEBOX_NAME,MailPlugin.ARCHIEBOX);
folderName.put(MailPlugin.SEARCHBOX_NAME,MailPlugin.SEARCHBOX);
}
/**
* The constructor
*/
public MailPlugin() {
plugin = this;
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#start(org.osgi.framework.BundleContext)
*/
public void start(BundleContext context) throws Exception {
super.start(context);
try {
//暂只支持一个pop3邮箱
System.setProperty("jp.gr.java_conf.roadster.net.pop.rootDirectory", ConfigHelper.getDataHome()+ "/data/mailbox/");
//设置用户自定义的配置
Map<String,String> map=ConfigHelper.getPopper();
for(String key:map.keySet()){
System.setProperty(POP3Store.BASE_PROPERTY+key, map.get(key));
}
//用一个空的authentication,解决service的classloader问题
Session session = Session.getInstance(System.getProperties(), new Authenticator() {});
session.setDebug(true);
store = session.getStore(new URLName(ConfigHelper.getPop3()[0]));
store.connect();
store.getFolder("OUTBOX").create(Folder.HOLDS_MESSAGES);
store.getFolder("TRASHBOX").create(Folder.HOLDS_MESSAGES);
store.getFolder("ARCHIEBOX").create(Folder.HOLDS_MESSAGES);
// 载入缓存
{
HashMap headersMap = new HashMap();
FileInputStream fis = new FileInputStream(ConfigHelper.getDataHome() + "/data/mailbox/" + MAIL_INDEX_FILE);
ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(fis, 1024));
headersMap = (HashMap) ois.readObject();
ois.close();
MessageIndex.setHEADERS_MAP(headersMap);
}
{
HashSet readSet=new HashSet();
FileInputStream fis = new FileInputStream(ConfigHelper.getDataHome() + "/data/mailbox/" + MAIL_READ_FILE);
ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(fis, 1024));
readSet = (HashSet) ois.readObject();
ois.close();
FolderViewer.setReadSet(readSet);
}
} catch (FileNotFoundException fex) {
;
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* (non-Javadoc)
*
* @see org.eclipse.ui.plugin.AbstractUIPlugin#stop(org.osgi.framework.BundleContext)
*/
public void stop(BundleContext context) throws Exception {
plugin = null;
store.close();
HashMap headersMap = MessageIndex.getHEADERS_MAP();
if (!headersMap.isEmpty()) {
FileOutputStream fos = new FileOutputStream(ConfigHelper.getDataHome() + "/data/mailbox/" + MAIL_INDEX_FILE);
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(fos, 1024));
oos.writeObject(headersMap);
oos.close();
}
Set readSet=FolderViewer.getReadSet();
if(!readSet.isEmpty()){
FileOutputStream fos = new FileOutputStream(ConfigHelper.getDataHome() + "/data/mailbox/" + MAIL_READ_FILE);
ObjectOutputStream oos = new ObjectOutputStream(new BufferedOutputStream(fos, 1024));
oos.writeObject(readSet);
oos.close();
}
super.stop(context);
}
/**
* Returns the shared instance
*
* @return the shared instance
*/
public static MailPlugin getDefault() {
return plugin;
}
/**
* Returns an image descriptor for the image file at the given plug-in
* relative path
*
* @param path
* the path
* @return the image descriptor
*/
public static ImageDescriptor getImageDescriptor(String path) {
return imageDescriptorFromPlugin(PLUGIN_ID, path);
}
public Store getStore() {
return store;
}
public static String convertFolderName(String name){
return folderName.get(name);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -