java邮件客户端_java实现POP3邮件客户端

本文展示了如何使用Java编写一个POP3邮件客户端,通过连接邮件服务器,进行用户验证、状态查询、邮件列表获取和邮件内容接收等操作。代码详细解释了各个关键步骤,包括发送用户、密码命令,接收服务器响应,以及执行stat、list、retr和quit等POP3协议命令。
摘要由CSDN通过智能技术生成

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 }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值