java使用socket发送邮件
package com.abke.email.utils;
import java.io.*;
import java.net.Socket;
public class SendMailUtil {
public static void main(String[] arg) {
String email = "liou@163.com";
sendMail(email,"smtp.qq.com");
}
private static Boolean sendMail(String mail, String hostname) {
Socket socket = null;
BufferedReader reader = null;
BufferedWriter writer = null;
try {
int resp;
socket = new Socket(hostname, 25);
reader = new BufferedReader(new InputStreamReader(socket.getInputStream()));
writer = new BufferedWriter(new OutputStreamWriter(socket.getOutputStream()));
resp = smtpResp(reader);
if (resp != 220) {
return false;
}
smtpExce(writer, "ehlo friend");
resp = smtpResp(reader);
if (resp != 250) {
return false;
}
smtpExce(writer, "auth login");
resp = smtpResp(reader);
if (resp != 334) {
throw new Exception("Sender rejected");
}
smtpExce(writer, "NzY3NzM2MTc3QHFxLmNvbQ==>");
resp = smtpResp(reader);
if (resp != 334) {
throw new Exception("Sender rejected");
}
smtpExce(writer, "ZnZwZ3B5d3JydnhkYmZmZg==>");
resp = smtpResp(reader);
if (resp != 235) {
throw new Exception("Sender rejected");
}
smtpExce(writer, "MAIL FROM: <123@qq.com>");
resp = smtpResp(reader);
if (resp != 250) {
throw new Exception("Sender rejected");
}
smtpExce(writer, "RCPT TO: <" + mail + ">");
resp = smtpResp(reader);
if (resp != 250) {
return false;
}
smtpExce(writer, "data");
resp = smtpResp(reader);
if (resp != 354) {
return false;
}
smtpExce(writer, "subject:测试");
smtpExce(writer, "from:"+"123@qq.com");
smtpExce(writer, "to:"+mail);
smtpExce(writer, "Content-Type: text/plain;charset=\"utf-8\"");
smtpExce(writer, "");
smtpExce(writer, "测试socket发送邮件");
smtpExce(writer, ".");
resp = smtpResp(reader);
smtpExce(writer, "RSET");
smtpResp(reader);
smtpExce(writer, "QUIT");
smtpResp(reader);
} catch (Exception ex) {
return false;
} finally {
try {
if (reader != null) {
reader.close();
}
if (writer != null) {
writer.close();
}
if (socket != null) {
socket.close();
}
} catch (Exception e) {
}
}
return null;
}
private static void smtpExce(BufferedWriter wr, String smtpCmd) throws IOException {
wr.write(smtpCmd + "\r\n");
wr.flush();
return;
}
private static int smtpResp(BufferedReader in) throws IOException {
String line = null;
int respCode = 0;
while ((line = in.readLine()) != null) {
String statusCode = line.substring(0, 3);
try {
respCode = Integer.parseInt(statusCode);
} catch (Exception ex) {
respCode = -1;
}
if (line.charAt(3) != '-') {
break;
}
}
return respCode;
}
}