首页 > 编程 > Java > 正文

java使用Socket实现SMTP协议发送邮件

2019-11-26 14:16:50
字体:
来源:转载
供稿:网友

本文实例为大家分享了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.baidu.com/img/baidu_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("获取响应失败");      }    }   }}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持武林网。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表