//主函数
imp
imp
imp
public class MailServer {
public static void main(String[] args) {
try{
new SMTPServer().start();
new POP3Server().start();
Date date=new Date();
System.out.println("邮件服务器启动,可以使用"+date);
}catch(Exception e){
e.printStackTrace();
}
}
}
package wrfei.mail.pop3;
imp
imp
imp
imp
imp
imp
imp
imp
imp
imp
imp
imp
public class POP3Session extends Thread {
private Socket s;
private PrintStream ps;
private BufferedReader br;
// private String name="267287116";
// private String pswd="wangruofei";
private String username;
private String password;
private String path;
private File file;
private File[] menu;
private int n;
private long oct;
private List<Integer> dropIndex;//标记为删除的下标集合
public static final String CMD_USER="USER";
public static final String CMD_PASS="PASS";
public static final String CMD_STAT="STAT";
public static final String CMD_LIST="LIST";
public static final String CMD_RETR="RETR";
public static final String CMD_DELE="DELE";
public static final String CMD_RSET="RSET";
public static final String CMD_NOOP="NOOP";
public static final String CMD_QUIT="QUIT";
public static final String CMD_TOP="TOP";
public POP3Session(Socket s) {
this.s=s;
}
@Override
public void run() {
try {
br=new BufferedReader(new InputStreamReader(s.getInputStream()));
ps=new PrintStream(s.getOutputStream());
dropIndex=new ArrayList<Integer>();
doWelcome();
String line=null;
while((line=br.readLine())!=null){
System.out.println(line);
String command=line.substring(0,4).trim();
if(command.equalsIgnoreCase(CMD_USER))
doUser(line);
else if(command.equalsIgnoreCase(CMD_PASS))
doPass(line);
else if(command.equalsIgnoreCase(CMD_STAT))
doStat();
else if(command.equalsIgnoreCase(CMD_LIST))
doList(line);
else if(command.equalsIgnoreCase(CMD_RETR))
doRetr(line);
else if(command.equalsIgnoreCase(CMD_DELE))
doDele(line);
else if(command.equalsIgnoreCase(CMD_RSET))
doRset();
else if(command.equalsIgnoreCase(CMD_NOOP))
doNoop();
else if(command.equalsIgnoreCase(CMD_TOP))
doTop();
else if(command.equalsIgnoreCase(CMD_QUIT)){
doQuit();
break;
}
}
} catch (IOException e) {
e.printStackTrace();
}
finally{
try{
br.close();
ps.close();
s.close();
}catch(Exception e){
e.printStackTrace();
}
}
}
private void doTop() {
}
private void doNoop() {
ps.println("+OK");
}
private void doRset() {
for(int i=dropIndex.size();i>=0;i--){
dropIndex.remove(i);
}
ps.println("+OK");
}
private void doDele(String line) {
n=Integer.parseInt(line.substring(5));
if(!dropIndex.contains(n)){
dropIndex.add(n);
ps.println("+OK message"+n+"deleted!");
}
else{
ps.println("-ERR");
}
}
private void doRetr(String line) {
try{
String strIndex=line.substring(5);
n=Integer.parseInt(strIndex);
if(strIndex==null||n<0||n>menu.length+1){
ps.println("-ERR no such message");
}
else{
ps.println("+OK "+menu[n-1].getName()+" size:"+menu[n-1].length()+"octets");
BufferedReader in = new BufferedReader(new FileReader(menu[n-1]));
String line2=null;
while((line2=in.readLine())!=null){
ps.println(line2);
}
in.close();
ps.println(".");
}
}catch(Exception e){
e.printStackTrace();
}
}
private void doList(String line) {
String[] arr=line.trim().split(" ");
String index=null;
if(arr.length>1)
index=arr[1];
if(index==null){
ps.println("+OK"+username+"'s maildrop has"+menu.length+"messages("+oct+"octets)");
for(int i=0;i<menu.length;i++){
ps.println(i+1+" "+menu[i].getName()+" size:"+menu[i].length()+"octets");
}
ps.println(".");
}
else{
int ind=Integer.parseInt(index);
if(ind<1||ind>menu.length){
ps.println("-ERR no such message");
}
else{
ps.println("+OK"+ind+" "+menu[ind-1].length());
ps.println(".");
}
}
}
private void doStat() {
System.out.println("+OK"+" "+menu.length+" "+oct);
ps.println("+OK"+" "+menu.length+" "+oct);
}
private void doQuit() {
if(dropIndex.size()>0){
for(int i=0;i<dropIndex.size();i++){
int index=dropIndex.get(i);
menu[index-1].delete();
}
}
ps.println("+OK GOODBYE");
}
private void getRB(){
path="MailBox/"+username+"/receiver/";
file=new File(path);
menu=file.listFiles();
for(int i=0;i<menu.length;i++){
oct+=menu[i].length();//计算收件夹字节数
}
}
private void doPass(String line) {
password=line.substring(5);
//System.out.println(password);
boolean flag=checkUser();
if(flag){
getRB();
ps.println("+OK"+username+"'s maildrop has"+menu.length+"messages("+oct+"objects)");
}else{
ps.println("-ERR");
}
}
private boolean checkUser() {
DbConn conn=new DbConn();
try {
String sql="select * from user where name='"+username +"'and password='"+password+"'";
ResultSet rs=conn.executeQuery(sql);
if(rs.next())
return true;
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
return false;
}
private void doUser(String line) {
username=line.substring(5);
//System.out.println(username);
ps.println("+OK");
}
private void doWelcome() {
ps.println("+OK");
}
}