Java实现邮件客户端

小背景

之前一直是小的实验,今天花了将近一天的时间将邮件客户端实现了。

 具体细节

其实整个小项目就是将之前的一些命令和Java Swing的知识相结合来实现的。具体步骤如下:

  • 首先构造登录的页面,在这个页面上需要的信息就是用户名和密码,但是由于现在的第三方登录客户端的密码都是授权码,所以大家在写这个之前需要将授权码记好。

                                       

Java实现邮件客户端_第1张图片

  • 第二部就是构造登录成功的界面了,这个时候需要的信息有:接收端邮箱,邮件主题,邮件内容。

                                                     

Java实现邮件客户端_第2张图片

 

  • 将界面做好之后,可以写后台代码了。首先通过TCP连接到SMTP服务器,端口号是25,接着后台与服务器进行交互,其中包括HELO、AUTH LOGIN、DATA、MAIL FROM、RCPT TO等指令,通过这些指令进行身份认证,以及消息的发送。具体的效果如下(图一是控制台打印的消息,图二是在客户端填写的相关信息,图三是接收到的邮件信息):

Java实现邮件客户端_第3张图片Java实现邮件客户端_第4张图片

关键代码如下:

              try {
			           Socket client = new Socket("smtp.qq.com",25);
			           BufferedReader br = new BufferedReader(new InputStreamReader(client.getInputStream()));
		            String response = br.readLine();
		            if(response.equals("220 smtp.qq.com Esmtp QQ Mail Server")){
		            	System.out.println("客户端已经连接到腾讯邮件服务器!!");
		            	//输入EHLO指令
		            	DataOutputStream dos = new DataOutputStream(client.getOutputStream());
		    			dos.writeBytes("HELO sunyuhu\r\n");
		    			dos.flush();
		    	        response = br.readLine();
		    	        if(!response.equals("250 smtp.qq.com")){
		    	        	 System.out.println("命令错误!!!");
		    	        }
		    	        //输入认证指令,用户名和密码
		    			dos.writeBytes("AUTH LOGIN\r\n");
		    			dos.flush();
		    	        response = br.readLine();
		    	        if(!response.equals("334 VXNlcm5hbWU6")){
		   	        	 	System.out.println("命令错误!!!");
		   	            }else{
		   	            	System.out.print("请输入用户名:");
		   	            	dos.writeBytes(Base64.getEncoder().encodeToString(username.getBytes())+ "\r\n");
		   	    			dos.flush();
		   	    	        response = br.readLine();
			   	    	    if(!response.equals("334 UGFzc3dvcmQ6")){
			    	        	 	System.out.println("用户名输入错误!!!");
			    	        	 	textField.setText("");
			    	        	 	textField_1.setText("");
			    	        }else{
			    	        	    System.out.println("用户名输入成功!!!");
			    	            	System.out.print("请输入密码:");
			    	            	dos.writeBytes("dm54dmJ2YWJpbXZwaGpjZQ==\r\n");
			    	    			dos.flush();
			    	    	        response = br.readLine();
			    	    	        if(!response.equals("235 Authentication successful")){
			    	    	        	System.out.println("密码输入错误!!!");
			    	    	        	textField.setText("");
				    	        	 	textField_1.setText("");
				    	        	 	textArea.setText("");
			    	    	        }else{
			    	    	        	System.out.println("登录成功!!!");
				    	            	dos.writeBytes("mail from:<"+username+"\r\n");
				    	    			dos.flush();
				    	    			response = br.readLine();
				    	    			dos.writeBytes("rcpt to:<" +receiver +">\r\n");
				    	    			dos.flush();
				    	    	        response = br.readLine();
				    	    	       if(!response.equals("250 Ok")){
				    	    	    	   System.out.println("输入错误!!!");
				    	    	       }else{
				    	    	    	   dos.writeBytes("data\r\n");
					    	    		   dos.flush();
					    	    		   response = br.readLine();
				    	    	    	   dos.writeBytes("from:" + username + "\r\n"+"to:<"+receiver+">\r\nsubject:"+ subject + "\r\n\r\n" + content.toString()+"\r\n.\r\n");
					    	    		   dos.flush();
					    	    		   
				    	    	    	   System.out.println(br.readLine()+ "\n发送成功!!");
				    	    	       }
			    	    	        }
			    	        }
		   	            }
		            }
		            else{
		            	System.out.println("未知错误!!!");
		            }
				} catch (UnknownHostException e1) {
					e1.printStackTrace();
				} catch (IOException e1) {
					e1.printStackTrace();
				}

 

总结

写完了之后才发现也没有那么难,现在也算是明白了“万事开头难”的道理,以后还是要多尝试。并且如果这个小项目,加上POP3协议的话,就可以实现查看和删除邮件的功能了,后面如果有时间的话可以尝试实现。需要源码的兄弟可以下载一下,java邮件客户端

你可能感兴趣的:(网络相关)