程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> java應用Socket完成SMTP協定發送郵件

java應用Socket完成SMTP協定發送郵件

編輯:關於JAVA

java應用Socket完成SMTP協定發送郵件。本站提示廣大學習愛好者:(java應用Socket完成SMTP協定發送郵件)文章只能為提供參考,不一定能成為您想要的結果。以下是java應用Socket完成SMTP協定發送郵件正文


本文實例為年夜家分享了java 應用Socket完成SMTP協定發送郵件的詳細代碼,供年夜家參考,詳細內容以下

package mail;
 
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.PrintWriter;
import java.io.Reader;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
 
import org.apache.commons.codec.binary.Base64;
 
public class Mail {
 
  public static void main(String[] args) throws IOException {
    Mail mail = new Mail();
    mail.setSmtpServer("smtp.qq.com");
    mail.setFromMail("1344364****@qq.com");
    mail.addToMail("105648****@qq.com");
    mail.addToMail("long*****@sina.com");
    mail.setUserName("134364****");
    mail.setPassword("*************");
    mail.setSubject("測試郵件");
    mail.setContent("<h1>你好</h1><br/><img src=\"https://www.百度.com/img/百度_jgylogo3.gif?v=39549282.gif\" />");
    mail.setShowLog(true);
    mail.send();
    System.out.println("法式停止");
  }
 
  /** 郵件主題 **/
  private String subject;
  /** 從此地址收回 **/
  private String fromMail;
  /** 用戶名 **/
  private String userName;
  /** 登錄暗碼 **/
  private String password;
  /** SMTP 辦事器地址 **/
  private String smtpServer;
  /** SMTP 辦事器端口(默許:25) **/
  private int smtpPort = 25;
  /** 發送到 toMail 中的一切地址 **/
  private List<String> toMail;
  /** 郵件內容 **/
  private String content;
  /** 能否顯示日記 **/
  private boolean showLog;
 
  public void addToMail(String mail) {
    if (toMail == null)
      toMail = new ArrayList<String>();
    toMail.add(mail);
  }
 
  public void send() {
    if (smtpServer == null) {
      throw new RuntimeException("smtpServer 不克不及為空");
    }
    if (userName == null) {
      throw new RuntimeException("userName 不克不及為空");
    }
    if (password == null) {
      throw new RuntimeException("password 不克不及為空");
    }
    if (fromMail == null) {
      throw new RuntimeException("fromMail 不克不及為空");
    }
    if (toMail == null || toMail.isEmpty()) {
      throw new RuntimeException("toMail 不克不及為空");
    }
    if (content == null || toMail.isEmpty()) {
      throw new RuntimeException("content 不克不及為空");
    }
 
    Socket socket = null;
    InputStream in = null;
    OutputStream out = null;
    try {
      socket = new Socket(smtpServer, smtpPort);
      socket.setSoTimeout(3000);
      in = socket.getInputStream();
      out = socket.getOutputStream();
    } catch (IOException e) {
      throw new RuntimeException("銜接到 " + smtpServer + ":" + smtpPort + " 掉敗", e);
    }
 
    BufferedReaderProxy reader = new BufferedReaderProxy(new InputStreamReader(in), showLog);
    PrintWriterProxy writer = new PrintWriterProxy(out, showLog);
 
    reader.showResponse();
    writer.println("HELO " + smtpServer);
    reader.showResponse();
    writer.println("AUTH LOGIN");
    reader.showResponse();
    writer.println(new String(Base64.encodeBase64(userName.getBytes())));
    reader.showResponse();
    writer.println(new String(Base64.encodeBase64(password.getBytes())));
    reader.showResponse();
    writer.println("MAIL FROM:" + fromMail);
    reader.showResponse();
    for (String mail : toMail) {
      writer.println("RCPT TO:" + mail);
      reader.showResponse();
    }
    writer.println("DATA");
    writer.println("Content-Type:text/html");
    if (subject != null) {
      writer.println("Subject:" + subject);
    }
    writer.println("From:" + fromMail);
    writer.print("To:");
    for (String mail : toMail) {
      writer.print(mail + "; ");
    }
    writer.println();
    writer.println();
    writer.println(content);
    writer.println(".");
    reader.showResponse();
    writer.println("QUIT");
    reader.showResponse();
    try {
      socket.close();
    } catch (IOException e) {
      System.err.println("發送郵件完成,封閉 Socket 失足:" + e.getMessage());
    }
  }
 
  public String getSubject() {
    return subject;
  }
 
  public void setSubject(String subject) {
    this.subject = subject;
  }
 
  public String getFromMail() {
    return fromMail;
  }
 
  public void setFromMail(String fromMail) {
    this.fromMail = fromMail;
  }
 
  public String getSmtpServer() {
    return smtpServer;
  }
 
  public void setSmtpServer(String smtpServer) {
    this.smtpServer = smtpServer;
  }
 
  public int getSmtpPort() {
    return smtpPort;
  }
 
  public void setSmtpPort(int smtpPort) {
    this.smtpPort = smtpPort;
  }
 
  public String getContent() {
    return content;
  }
 
  public void setContent(String content) {
    this.content = content;
  }
 
  public List<String> getToMail() {
    return toMail;
  }
 
  public void setToMail(List<String> toMail) {
    this.toMail = toMail;
  }
 
  public String getUserName() {
    return userName;
  }
 
  public void setUserName(String userName) {
    this.userName = userName;
  }
 
  public String getPassword() {
    return password;
  }
 
  public void setPassword(String password) {
    this.password = password;
  }
 
  public boolean getShowLog() {
    return showLog;
  }
 
  public void setShowLog(boolean showLog) {
    this.showLog = showLog;
  }
 
  static class PrintWriterProxy extends PrintWriter {
    private boolean showRequest;
 
    public PrintWriterProxy(OutputStream out, boolean showRequest) {
      super(out, true);
      this.showRequest = showRequest;
    }
 
    @Override
    public void println() {
      if (showRequest)
        System.out.println();
      super.println();
    }
 
    public void print(String s) {
      if (showRequest)
        System.out.print(s);
      super.print(s);
    }
  }
 
  static class BufferedReaderProxy extends BufferedReader {
    private boolean showResponse = true;
 
    public BufferedReaderProxy(Reader in, boolean showResponse) {
      super(in);
      this.showResponse = showResponse;
    }
 
    public void showResponse() {
      try {
        String line = readLine();
        String number = line.substring(0, 3);
        int num = -1;
        try {
          num = Integer.parseInt(number);
        } catch (Exception e) {
        }
        if (num == -1) {
          throw new RuntimeException("呼應信息毛病 : " + line);
        } else if (num >= 400) {
          throw new RuntimeException("發送郵件掉敗 : " + line);
        }
        if (showResponse) {
          System.out.println(line);
        }
      } catch (IOException e) {
        System.out.println("獲得呼應掉敗");
      }
    }
 
  }
}

以上就是本文的全體內容,願望對年夜家的進修有所贊助,也願望年夜家多多支撐。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved