34 }35
36 /*构造函数*/
37 public POP3Client(String server,int port) throwsUnknownHostException, IOException{38 try{39
40 socket=new Socket(server,port);//在新建socket的时候就已经与服务器建立了连接
41
42 }catch(Exception e){43
44 e.printStackTrace();45
46 }finally{47
48 System.out.println("建立连接!");49 }50 }51
52
53 //接收邮件程序
54 public booleanrecieveMail(String user,String password){55
56 try{57 BufferedReader in=new BufferedReader(newInputStreamReader(socket.getInputStream()));58
59 BufferedWriter out=new BufferedWriter(newOutputStreamWriter(socket.getOutputStream()));60
61 user(user,in,out);//输入用户名
62
63 System.out.println("user 命令执行完毕!");64
65 pass(password,in,out);//输入密码
66
67 System.out.println("pass 命令执行完毕!");68
69 stat(in,out);70
71 System.out.println("stat 命令执行完毕!");72
73 list(in,out);74
75 System.out.println("list 命令执行完毕!");76
77 retr(2,in,out);78
79 System.out.println("retr 命令执行完毕!");80
81 quit(in,out);82
83 System.out.println("quit 命令执行完毕!");84
85 }catch(Exception e){86
87 e.printStackTrace();88
89 return false;90 }91 return true;92 }93
94 //得到服务器返回的一行命令
95 publicString getReturn(BufferedReader in){96
97 String line="";98
99 try{100 line=in.readLine();101
102 if(debug){103
104 System.out.println("服务器返回状态:"+line);105 }106 }catch(Exception e){107
108 e.printStackTrace();109 }110 returnline;111 }112
113 //从返回的命令中得到第一个字段,也就是服务器的返回状态码(+OK或者-ERR)
114 publicString getResult(String line){115
116 StringTokenizer st=new StringTokenizer(line," ");117
118 returnst.nextToken();119 }120
121 //发送命令
122 private String sendServer(String str,BufferedReader in,BufferedWriter out) throwsIOException{123
124 out.write(str);//发送命令
125
126 out.newLine();//发送空行
127
128 out.flush();//清空缓冲区
129
130 if(debug){131
132 System.out.println("已发送命令:"+str);133 }134 returngetReturn(in);135 }136
137 //user命令
138
139 public void user(String user,BufferedReader in,BufferedWriter out) throwsIOException{140
141 String result = null;142
143 result=getResult(getReturn(in));//先检测连接服务器是否已经成功
144
145 if(!"+OK".equals(result)){146
147 throw new IOException("连接服务器失败!");148 }149
150 result=getResult(sendServer("user "+user,in,out));//发送user命令
151
152 if(!"+OK".equals(result)){153
154 throw new IOException("用户名错误!");155 }156 }157
158 //pass命令
159 public void pass(String password,BufferedReader in,BufferedWriter out) throwsIOException{160
161 String result = null;162
163 result = getResult(sendServer("pass "+password,in,out));164
165 if(!"+OK".equals(result)){166
167 throw new IOException("密码错误!");168 }169 }170
171
172 //stat命令
173
174 public int stat(BufferedReader in,BufferedWriter out) throwsIOException{175
176 String result = null;177
178 String line = null;179
180 int mailNum = 0;181
182 line=sendServer("stat",in,out);183
184 StringTokenizer st=new StringTokenizer(line," ");185
186 result=st.nextToken();187
188 if(st.hasMoreTokens())189
190 mailNum=Integer.parseInt(st.nextToken());191
192 else{193
194 mailNum=0;195
196 }197
198 if(!"+OK".equals(result)){199
200 throw new IOException("查看邮箱状态出错!");201 }202
203 System.out.println("共有邮件"+mailNum+"封");204 returnmailNum;205 }206
207 //无参数list命令
208 public void list(BufferedReader in,BufferedWriter out) throwsIOException{209
210 String message = "";211
212 String line = null;213
214 line=sendServer("list",in,out);215
216 while(!".".equalsIgnoreCase(line)){217
218 message=message+line+"\n";219
220 line=in.readLine().toString();221 }222
223 System.out.println(message);224 }225
226 //带参数list命令
227 public void list_one(int mailNumber ,BufferedReader in,BufferedWriter out) throwsIOException{228
229 String result = null;230
231 result = getResult(sendServer("list "+mailNumber,in,out));232
233 if(!"+OK".equals(result)){234
235 throw new IOException("list错误!");236 }237 }238
239 //得到邮件详细信息
240
241 public String getMessagedetail(BufferedReader in) throwsUnsupportedEncodingException{242
243 String message = "";244
245 String line = null;246
247 try{248 line=in.readLine().toString();249
250 while(!".".equalsIgnoreCase(line)){251
252 message=message+line+"\n";253
254 line=in.readLine().toString();255 }256 }catch(Exception e){257
258 e.printStackTrace();259 }260
261 returnmessage;262 }263
264 //retr命令
265 public void retr(int mailNum,BufferedReader in,BufferedWriter out) throwsIOException, InterruptedException{266
267 String result = null;268
269 result=getResult(sendServer("retr "+mailNum,in,out));270
271 if(!"+OK".equals(result)){272
273 throw new IOException("接收邮件出错!");274 }275
276 System.out.println("第"+mailNum+"封");277 System.out.println(getMessagedetail(in));278 Thread.sleep(3000);279 }280
281 //退出
282 public void quit(BufferedReader in,BufferedWriter out) throwsIOException{283
284 String result;285
286 result=getResult(sendServer("QUIT",in,out));287
288 if(!"+OK".equals(result)){289
290 throw new IOException("未能正确退出");291 }292 }293
294 }