// 这是欠安鸣哥一年多的代码。一年零三个月以前就应该实现的。结果拖到今天,还费了一下午。
package javaMailTest; 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.net.InetAddress; import java.net.Socket; public class MailSender { private String smtpServer = "smtp.yeah.net"; private int port = 25; public static void main(String[] args) { Message msg = new Message( "ourauc@yeah.net", // Sender "wzhi1997@qq.com", "成功", "已出,请及时检查更新"); new MailSender().sendMail(msg); } public void sendMail(Message msg) { Socket socket = null; try{ socket = new Socket(smtpServer, port); BufferedReader br = getReader(socket); PrintWriter pw = getWriter(socket); String localhost = InetAddress.getLocalHost().getHostName(); String username = msg.from; String password = "12345@#$%^"; username = new sun.misc.BASE64Encoder().encode(username.getBytes()); password = new sun.misc.BASE64Encoder().encode(password.getBytes()); sendAndReceive(null, br, pw); sendAndReceive("EHLO " + localhost, br, pw); sendAndReceive("AUTH LOGIN", br, pw); sendAndReceive(username, br, pw); sendAndReceive(password, br, pw); sendAndReceive("MAIL FROM:<" + msg.from + ">", br, pw); sendAndReceive("RCPT TO:<" + msg.to + ">", br, pw); sendAndReceive("DATA", br, pw); sendAndReceive(msg.data, br, pw); sendAndReceive(".", br, pw); sendAndReceive("QUIT", br, pw); } catch (IOException e) { e.printStackTrace(); } finally { try { if (socket != null) socket.close(); } catch (IOException e2) { e2.printStackTrace(); } } } private void sendAndReceive(String str, BufferedReader br, PrintWriter pw) throws IOException { if (str != null) { System.out.println("Client>" + str); pw.println(str); } String response = ""; if ((response = br.readLine()) != null) { System.out.println("Server>" + response); } try { Thread.sleep(1000); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } private PrintWriter getWriter(Socket socket) throws IOException { OutputStream socketOut = socket.getOutputStream(); return new PrintWriter(socketOut,true); } private BufferedReader getReader(Socket socket) throws IOException { InputStream socketIn = socket.getInputStream(); return new BufferedReader(new InputStreamReader(socketIn)); } } class Message { String from; String to; String subject; String content; String data; public Message(String from, String to, String subject, String content) { this.from = from; this.to = to; this.subject = subject; this.content = content; data = "From:ourauc@yeah.net\r\nTo:wzhi1997@qq.com\r\nSubject:" + subject + "\r\n\r\n" + content; } }
// 最后还是致敬安鸣哥!