Java实现邮件客户端
程序员文章站
2022-05-18 14:50:51
...
小背景
之前一直是小的实验,今天花了将近一天的时间将邮件客户端实现了。
具体细节
其实整个小项目就是将之前的一些命令和Java Swing的知识相结合来实现的。具体步骤如下:
- 首先构造登录的页面,在这个页面上需要的信息就是用户名和密码,但是由于现在的第三方登录客户端的密码都是授权码,所以大家在写这个之前需要将授权码记好。
-
第二部就是构造登录成功的界面了,这个时候需要的信息有:接收端邮箱,邮件主题,邮件内容。
- 将界面做好之后,可以写后台代码了。首先通过TCP连接到SMTP服务器,端口号是25,接着后台与服务器进行交互,其中包括HELO、AUTH LOGIN、DATA、MAIL FROM、RCPT TO等指令,通过这些指令进行身份认证,以及消息的发送。具体的效果如下(图一是控制台打印的消息,图二是在客户端填写的相关信息,图三是接收到的邮件信息):
关键代码如下:
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邮件客户端
上一篇: 关于PHP传值与传引用的奇怪有关问题