📄 mailutil.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 + -