?? pop3service.java
字號:
package com.softeem.myMail.pop3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.util.Date;
import java.util.Properties;
public class POP3Service implements Runnable {
/**
* @param args
*/
private String user;
private Socket socket;
private BufferedReader br;
private BufferedWriter bw;
private Properties prop = new Properties();
private File[] userMailbox;
private InputStream in;
private BufferedReader inFile;
private File f;
private int[] delNum;
private int allNub;
public POP3Service(Socket socket) {
super();
this.socket = socket;
}
public void init() {
// 解析屬性文件得到對應的值
try {
in = new FileInputStream(new File("config.properties"));
prop.load(in);
in.close();
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run() {
try {
init();
br = new BufferedReader(new InputStreamReader(socket
.getInputStream()));
bw = new BufferedWriter(new OutputStreamWriter(socket
.getOutputStream()));
sendWelcomeMessage();
while (prastCommand(br.readLine())) {
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
inFile.close();
in.close();
bw.close();
br.close();
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
// USER 用戶名
// PASS 密碼
// STAT 狀態
// LIST 列表
// RETR
// DELE 刪除
// QUIT 退出
private boolean prastCommand(String command) {
boolean flag = true;
String argument = null;
int spaceIndex = command.indexOf(" ");
if (spaceIndex > 0) {
argument = command.substring(spaceIndex + 1);
command = command.substring(0, spaceIndex);
}
if (command.equalsIgnoreCase("USER")) {
doUSER(argument);
} else if (command.equalsIgnoreCase("PASS")) {
doPASS(argument);
} else if (command.equalsIgnoreCase("STAT")) {
doSTAT(argument);
} else if (command.equalsIgnoreCase("LIST")) {
doLIST(argument);
} else if (command.equalsIgnoreCase("RETR")) {
doRETR(argument);
} else if (command.equalsIgnoreCase("DELE")) {
doDELE(argument);
} else if (command.equalsIgnoreCase("QUIT")) {
doQUIT(argument);
return flag = false;
} else {
writerMessage("-ERR Syntax error in MAIL command");
}
return flag;
}
private void doUSER(String argument) {
String responseString = null;
if ((argument != null) && (prop.getProperty(argument) != null)) {
user = argument;
responseString = "+OK RIGHT_USER";
} else {
responseString = "-ERR ERR_USER";
}
writerMessage(responseString);
}
private void doPASS(String argument) {
if ((argument != null)
&& (prop.getProperty(user).equalsIgnoreCase(argument))) {
// responseString.append("+OK Welcome ").append(user);
writerMessage("+OK Welcome " + user);
} else {
// responseString.append("-ERR ERR_PASS");}
// writerMessage(responseString.toString());
writerMessage("-ERR ERR_PASS");
}
}
private void doSTAT(String argument) {
f = new File("E:\\mail\\" + user + "\\receivebox");
userMailbox = f.listFiles();
long size = 0;
int count = 0;
for (int i = 0; i < userMailbox.length; i++) {
if (userMailbox[i].isFile())
count++;
size = size + userMailbox[i].length();
}
StringBuffer responseBuffer = new StringBuffer(32).append("+OK")
.append(" ").append(count).append(" ").append(size);
writerMessage(responseBuffer.toString());
delNum = new int[count];
}
private void doLIST(String argument) {
long size = 0;
for (int i = 0; i < userMailbox.length; i++) {
if (i == 0) {
writerMessage("+OK");
}
if (userMailbox[i].isFile()) {
size = userMailbox[i].length();
writerMessage(i + 1 + " " + size);
}
if (i == userMailbox.length - 1) {
writerMessage(".");
}
}
}
private void doRETR(String argument) {
int num = new Integer(argument);
if (argument == null) {
writerMessage("-ERR COMMAND ERR");
} else {
if (num > userMailbox.length) {
writerMessage("-ERR COMMAND ERR");
} else {
for (int i = 0; i < userMailbox.length; i++) {
if (i == 0) {
writerMessage("+OK");
}
if (num == (i + 1)) {
doFile(userMailbox[i]);
}
if (i == userMailbox.length - 1) {
writerMessage(".");
}
}
}
}
}
private void doDELE(String argument) {
int num = new Integer(argument);
if (argument == null) {
writerMessage("-ERR COMMAND ERR");
} else {
if (num > userMailbox.length) {
writerMessage("-ERR COMMAND ERR");
} else {
for (int i = 0; i < userMailbox.length; i++) {
if (i == 0) {
writerMessage("+OK");
}
if (num == (i + 1)) {
delNum[allNub] = i;
allNub++;
}
}
}
}
}
private void doQUIT(String argument) {
for (int i = 0; i < delNum.length; i++) {
userMailbox[delNum[i]].delete();
}
StringBuffer responseBuff = new StringBuffer();
responseBuff.append("+OK java23 coremail");
writerMessage(responseBuff.toString());
}
private void writerMessage(String message) {
try {
bw.write(message);
bw.newLine();
bw.flush();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
private void sendWelcomeMessage() {
StringBuffer WelcomeMessage = new StringBuffer();
WelcomeMessage.append("+OK Welcome to java23 Mail Pop3 Server ")
.append(" <").append(new Date()).append(" > ");
writerMessage(WelcomeMessage.toString());
}
private void doFile(File file) {
try {
String buff = null;
inFile = new BufferedReader(new InputStreamReader(
new FileInputStream(file)));
while ((buff = inFile.readLine()) != null) {
writerMessage(buff);
}
} catch (FileNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -