⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 新建 文本文档.txt

📁 这是一个JAVA的邮件客户端收发源码这是一个JAVA的邮件客户端收发源码
💻 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 + -