欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Java实现邮件客户端

程序员文章站 2022-05-18 14:50:51
...

小背景

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

 具体细节

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

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

                                       

Java实现邮件客户端

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

                                                     

Java实现邮件客户端

 

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

Java实现邮件客户端Java实现邮件客户端Java实现邮件客户端

关键代码如下:

              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邮件客户端

相关标签: networking