📄 新建 文本文档.txt
字号:
package mailoper;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.net.InetAddress;
import java.net.Socket;
import java.util.Scanner;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTextArea;
import javax.swing.JTextField;
public class MailSender{
private JFrame frame;
private Scanner in;
private PrintWriter out;
private JTextField from;
private JTextField to;
private JTextField smtpServer;
private JTextArea message;
private JTextArea comm;
private Logger logger;
private PrintWriter ps;
public static final int DEFAULT_WHIDTH = 300;
public static final int DEFAULT_HEIGHT = 300;
public MailSender(){
try {
ps = new PrintWriter(new FileOutputStream("WebRoot\\ClientLog.txt",true),true);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
}
logger = new Logger(ps);
logger.log("MailSender","Info","开始记录日志...");
}
public MailSender(boolean isFraem){
this();
initFrame();
}
public void initFrame(){
frame = new JFrame();
frame.setSize(300,300);
frame.setTitle("邮件服务器");
frame.setLayout(new GridBagLayout());
frame.setLocation(200,200);
frame.setVisible(true);
frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame.add(new JLabel("From"),new GBC(0,0).setFill(GBC.HORIZONTAL));
from = new JTextField(20);
from.setText("shexu@163.com");
frame.add(from,new GBC(1,0).setFill(GBC.HORIZONTAL));
frame.add(new JLabel("To"),new GBC(0,1).setFill(GBC.HORIZONTAL));
to = new JTextField(20);
to.setText("liusumantian@shexu.com");
frame.add(to,new GBC(1,1).setFill(GBC.HORIZONTAL).setWeight(100,0));
frame.add(new JLabel("SMTP server:"),new GBC(0,2).setFill(GBC.HORIZONTAL));
smtpServer = new JTextField(20);
smtpServer.setText("localhost");
frame.add(smtpServer,new GBC(1,2).setFill(GBC.HORIZONTAL).setWeight(100,0));
message = new JTextArea();
message.setText("你好世界!!!");
frame.add(new JScrollPane(message),new GBC(0,3,2,1).setFill(GBC.BOTH).setWeight(100,100));
comm = new JTextArea();
frame.add(new JScrollPane(comm),new GBC(0,4,2,1).setFill(GBC.BOTH).setWeight(100,100));
JPanel buttonPanel = new JPanel();
frame.add(buttonPanel,new GBC(0,5,2,1));
JButton sendButton = new JButton("发送");
buttonPanel.add(sendButton);
sendButton.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
new Thread(new Runnable(){
public void run(){
comm.setText("");
sendMail();
}
}).start();
}
});
frame.validate();
}
public void sendMail(){
Socket server = null;
try{
server = new Socket(smtpServer.getText().trim(),25);
InputStream ins = server.getInputStream();
OutputStream outs = server.getOutputStream();
in = new Scanner(ins);
out = new PrintWriter(outs);
String hostName = InetAddress.getLocalHost().getHostName();
// 发送邮件过程
receive();
send("HELO " + hostName);
receive();
send("MAIL FROM:<" + from.getText().trim() + ">");
receive();
send("RCPT TO:<" + to.getText().trim() + ">");
receive();
send("DATA");
receive();
send(message.getText());
send(".");
receive();
send("QUIT");
receive();
} catch(IOException e){
e.printStackTrace();
comm.append("Error:" + e.getMessage());
} finally{
try {
if(server != null){
server.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
public void sendMail(String to,String from,String message){
Socket server = null;
try{
server = new Socket("localhost",25);
InputStream ins = server.getInputStream();
OutputStream outs = server.getOutputStream();
in = new Scanner(ins);
out = new PrintWriter(outs);
String hostName = InetAddress.getLocalHost().getHostName();
// 发送邮件过程
receive();
send("HELO " + hostName);
receive();
send("MAIL FROM:<" + from + ">");
receive();
send("RCPT TO:<" + to + ">");
receive();
send("DATA");
receive();
send(message);
send(".");
receive();
send("QUIT");
receive();
} catch(IOException e){
e.printStackTrace();
// comm.append("Error:" + e.getMessage());
} finally{
try {
if(server != null){
server.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 向服务端发送信息
* @param str
*/
private void send(String str) {
logger.log("MailSender","Info","发送信息:" + str);
// comm.append(str);
// comm.append("\n");
out.print(str.replaceAll("\n","\r\n") + "\r\n");
// out.print("\r\n");
out.flush();
}
/**
* 从服务端收到信息并显示
*/
private void receive() {
if(in.hasNextLine()){
String line = in.nextLine();
logger.log("MailSender","Info","服务器信息:" + line);
// comm.append(line);
// comm.append("\n");
}
}
public static void main(String[] args) {
new MailSender(true);
}
}
(2)邮件接收端源代码
package mailoper;
import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.PrintWriter;
import java.net.ServerSocket;
import java.net.Socket;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Properties;
/**
* 收信端服务器
* @author shx
*
*/
public class MailReceiver {
private ServerSocket server;
private Socket socket;
private PrintWriter pw;
private BufferedReader reader;
private int count;
private Logger logger;
private PrintWriter ps;
private PrintWriter out;
private SimpleDateFormat df;
private Date date;
public void receiveMail(){
df = new SimpleDateFormat("yyyy年MM月dd日hh时mm分ss秒");
date = new Date();
String str = df.format(date);
int cot = 0;
Properties pr = null;
try {
FileInputStream count = new FileInputStream("letter\\count.data");
pr = new Properties();
pr.load(count);
String temp = pr.getProperty("count");
System.out.println("Befor cot++:" + temp);
cot = Integer.parseInt(temp) + 1;
String fileName = "letter\\letter" + cot + ".data" ;
ps = new PrintWriter(new FileOutputStream("ServerLog.txt",true),true);
out = new PrintWriter(new FileOutputStream(fileName,true),true);
} catch (FileNotFoundException e1) {
e1.printStackTrace();
} catch(IOException e){
e.printStackTrace();
}
logger = new Logger(ps);
logger.log("MailReceiver","Info","开始记录日志...");
try {
server = new ServerSocket(25);
// 写日志文件
logger.log("MailReceiver","Info","服务器启动等待连接......");
System.out.println("服务器启动等待连接......");
// 启动服务
socket = server.accept();
// 写日志文件
out.println("时间:" +str.substring(0,14) + " 收到信件");
logger.log("MailReceiver","Info","收到主机" + socket.getInetAddress() + socket.getInetAddress().getHostName() +"的连接请求!");
System.out.println("收到主机" + socket.getInetAddress() + socket.getInetAddress().getHostName() +"的连接请求!");
pr.setProperty("count",new Integer(cot).toString());
pr.store(new FileOutputStream("letter\\count.data"),"count");
pw = new PrintWriter(socket.getOutputStream());
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
send("220 smtp.shexu.com SMTP CSUSOFTMAIL (Postfix Rules!)" + "\t\n");
receive();
send("250 OK smtp.shexu.com" + "\t\n");
receive();
send("250 OK Sender" + "\t\n");
receive();
send("250 OK Receiver" + "\t\n");
receive();
send("354 Start mail input; end with <CRLF>.<CRLF>" + "\t\n");
receiveData();// 接收Date
// receive();
send("250 OK" + "\t\n");
receive();
send("221 smtp.shexu.com Service closing transmission channel !GoodBye...");
} catch (IOException e) {
e.printStackTrace();
} finally{
if(server != null){
try {
server.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if(socket != null){
try {
socket.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public void receive(){
count++;
String str = null;
try {
if(!(str = reader.readLine()).trim().equals("")){
System.out.println(count + "收到客户端信息:" + str);
logger.log("MailReceiver","Info","收到客户端信息:" + str);
}
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 读取正文并保存到文件
*/
public void receiveData(){
char[] temp = new char[512];
String str = null;
int count = 0;
try {
while(!(str = reader.readLine()).trim().equals(".")){
count++;
System.out.println("收到客户端Date信息:" + str);
logger.log("MailReceiver","Info","收到客户端信息:" + str.trim());
// 消除开头换行
if(count >= 4 && count <=11){
}else {
out.println(str);
}
}
System.out.println("收到客户端Date信息:" + str);
logger.log("MailReceiver","Info","收到客户端信息:" + str.trim());
} catch (IOException e) {
e.printStackTrace();
}
}
public void send(String str){
logger.log("MailReceiver","Info","服务器发送信息:" + str.trim());
pw.print(str);
pw.flush();
}
public static void main(String[] args) {
MailReceiver mr = new MailReceiver();
while(true){
mr.receiveMail();
}
}
}
(3)邮件阅读源代码
package mailoper;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.Properties;
public class ReadLetter {
public int getCount() {
int count = 0;
try {
FileInputStream in = new FileInputStream("letter\\count.data");
Properties pr = new Properties();
pr.load(in);
count = Integer.parseInt(pr.getProperty("count"));
} catch (IOException e) {
e.printStackTrace();
}
return count;
}
public String readLetter(String file) {
String str = "";
try {
int temp = getCount();
for (int i = 1; i <= temp; i++) {
String fileName = "MailSender\\letter\\letter" + i + ".data";
FileInputStream in = new FileInputStream(fileName);
BufferedReader reader = new BufferedReader(new InputStreamReader(in));
System.out.println("************************");
String tem = null;
str = str + "信件" + i + ":<br>";
int count = 0;
while ((tem = reader.readLine()) != null) {
count++;
str = str + tem + "<br>";
System.out.println(tem.trim());
}
str = str + "<br>";
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
return str;
}
public static void main(String[] args) {
new ReadLetter().readLetter();
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -