⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mailutil.java

📁 Eclipse RCP下编写的工作管理软件代码
💻 JAVA
字号:
package scheduler;

import java.io.BufferedReader;
import java.io.DataOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;

import javax.mail.internet.MimeUtility;

public class MailUtil {

    protected Socket socket = null;
    protected DataOutputStream out = null;
    protected BufferedReader in = null;

    public static String checkMail(String server, int port,String username, String password){
    	MailUtil mu=new MailUtil();
    	try {
			return mu.getMailDesc(mu.getHeaders(server, port, username, password));
		} catch (Exception e) {
			e.printStackTrace();
		}finally{
			mu.cleanup();
		}
    	return null;
    }
    
    private MailUtil() {
    }

    private void cleanup() {
		try {
			if(out != null) {
				out.writeBytes("RSET\r\n");
  				out.writeBytes("QUIT\r\n");
        		out.flush();
			}
		} catch(Exception e) {
				e.printStackTrace();
		}
        try {
			if(out != null)
				out.close();
		} catch(Exception e) {
		    	e.printStackTrace();
        }
        try {
			if(in != null)
				in.close();
		} catch(Exception e) {
		    	e.printStackTrace();
        }
        try {
            if((socket != null) && socket.isConnected()) {
                socket.close();
            }
        } catch(Exception e) {
                e.printStackTrace();
        };

        socket = null;
        out = null;
        in = null;
    }

    private String processAnswer() throws IOException {
        String s = "";
        if(in == null) {
            return s;
        }
        s = in.readLine();
        return s;
    }

    private void login(String server, int port,String username, String password) throws IOException, UnknownHostException {
		cleanup();
        socket = new Socket(server, port);
        out = new DataOutputStream(socket.getOutputStream());
        in = new BufferedReader(new InputStreamReader(socket.getInputStream()));
        if(!processAnswer().startsWith("+OK")) {
            throw new UnknownHostException();
        }
        out.writeBytes("USER " + username + "\r\n");
        out.flush();
        if(!processAnswer().startsWith("+OK")) {
            throw new IOException("login Error");
        }
        out.writeBytes("PASS " + password + "\r\n");
		out.flush();
		if(!processAnswer().startsWith("+OK")) {
			throw new IOException("login Error");
        }
    }

    private Map<String,String>[] getHeaders(String server, int port,String username, String password) throws InterruptedException, IOException,UnknownHostException {
		login(server, port,username,password);
        ArrayList<Map<String,String>> messages = new ArrayList<Map<String,String>>();
        out.writeBytes("STAT\r\n");
        out.flush();
        String s = processAnswer();
		int messageCount = getMessageCount(s);
        for(int i = 1; i <= messageCount; ++i) {
			if(Thread.currentThread().isInterrupted()) {
				throw new InterruptedException();
			}
			Map<String,String> message = new HashMap<String,String>();
            out.writeBytes("TOP " + i + " 0\r\n");
            out.flush();
            s = processAnswer();
            while(s.length() > 0) {
                if(s.indexOf(":") != -1) {
                	int index = s.indexOf(":");
					String key = s.substring(0, index).toUpperCase();
					String value = s.substring(index + 1, s.length()).trim();
					s = processAnswer();
					while(s.length() > 0 && (s.charAt(0) == ' ' || s.charAt(0) == '\t')) {
						/*folded header*/
						value += " " + s.trim();
						s = processAnswer();
					}
					value = value.replaceAll("\"", "");
					message.put(key, value);
                } else {
                	s = processAnswer();
				}
            }
            s = processAnswer();
            while(!s.equals(".")) {
				s = processAnswer();
            }
            messages.add(message);
        }
        return (Map<String,String>[]) messages.toArray(new HashMap[0]);
    }

    private int getMessageCount(String s) {
		return Integer.parseInt(s.substring(s.indexOf(" ") + 1, s.lastIndexOf(" ")));
	}

    private String getMailDesc(Map<String,String>[] maps){
    	if(maps.length == 0)
    		return null;
    	StringBuilder sb=new StringBuilder();
    	sb.append("收到新邮件").append(maps.length).append("封");
    	int count=0;
    	for(Map<String,String> map:maps)
    		sb.append("\n").append(++count).append(".").append(decodeWord(map.get("SUBJECT"))).append("\t来自\t").append(decodeWord(map.get("FROM")));
    	return sb.toString();
    }

    private String decodeWord(String word){
    	try {
			return MimeUtility.decodeWord(word);
		} catch (Exception e) {
			return word;
		} 
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -