import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.net.Socket;
import java.net.UnknownHostException;
import java.util.StringTokenizer;
import sun.misc.BASE64Encoder;
public class SendMailImp implements SendMail {
public static final int SINA = 0;
public static final int QQ = 1;
public static final int FOXMAIL = 2;
public static final int WANGYI163 = 3;
public static final int WANGYI126 = 8;
public static final int YEAH = 4;
public static final int HOTMAIL = 5;
public static final int YAHOO = 6;
public static final int GMAIL = 7;
/** 用于向服务器发起连接 */
/** 与服务器连接后的输入流 */
/** 与服务器连接后的输出流 */
/** 发送邮件服务器名称 */
/** 发送端口号 */
private int port;
/** 邮件信息 */
private MailMessage message;
public MailMessage getMessage() {
return message;
}
//设置邮件的信息内容,以方法链的方式实现
public SendMailImp setMessage (MailMessage message) {
this.message = message;
return this;
}
return socket;
}
public void setSocket
(Socket socket
) {
this.socket = socket;
}
return input;
}
this.input = input;
}
return output;
}
this.output = output;
}
return server;
}
public void setServer
(String server
) {
this.server = server;
}
public int getPort() {
return port;
}
public void setPort (int port) {
this.port = port;
}
/**
* 根据邮箱类型,设置发送邮件服务器和端口号
*/
public static SendMailImp getInstance (int sendMailType) {
SendMailImp sendMailImp = new SendMailImp();
switch (sendMailType) {
case SINA:
sendMailImp.setServer ("smtp.sina.com");
sendMailImp.setPort (25);
break;
case QQ:
case FOXMAIL:
sendMailImp.setServer ("smtp.qq.com");
sendMailImp.setPort (25);
break;
case WANGYI126:
sendMailImp.setServer ("smtp.126.com");
sendMailImp.setPort (25);
break;
case WANGYI163:
sendMailImp.setServer ("smtp.163.com");
sendMailImp.setPort (25);
break;
case YEAH:
sendMailImp.setServer ("smtp.yeah.net");
sendMailImp.setPort (25);
break;
case YAHOO:
sendMailImp.setServer ("smtp.mail.yahoo.com");
sendMailImp.setPort (465);
break;
case GMAIL:
sendMailImp.setServer ("smtp.gmail.com");
sendMailImp.setPort (465);
break;
case HOTMAIL:
sendMailImp.setServer ("smtp.live.com");
sendMailImp.setPort (25);
break;
default:
break;
}
try {
// 与发送邮件服务器建立Socket连接,并得到输入输出流
Socket socket
= new Socket (sendMailImp.
getServer(), sendMailImp
.getPort() );
socket.getInputStream() ) );
socket.getOutputStream() ) );
sendMailImp.setSocket (socket);
sendMailImp.setInput (input);
sendMailImp.setOutput (output);
e.printStackTrace();
e.printStackTrace();
}
return sendMailImp;
}
public int sendToServer
(String order
) {
try {
this.getOutput().write (order);
this.getOutput().newLine();
this.getOutput().flush();
System.
out.
println ("已发送命令:" + order
);
e.printStackTrace();
}
return getResult();
}
public int getResult() {
try {
line = this.getInput().readLine();
System.
out.
println ("服务器返回状态:" + line
);
e.printStackTrace();
}
// 从服务器返回消息中取得状态码,并转换成整数返回
return Integer.
parseInt (get.
nextToken() );
}
int result = getResult();
// 连接上服务器后,服务器给出220应答
if (result != 220) {
}
result = sendToServer ("HELO " + this.getServer() );
// HELO命令成功后,服务器返回250应答
if (result != 250) {
}
}
BASE64Encoder encode = new BASE64Encoder();
int result = sendToServer ("AUTH LOGIN");
// 登陆服务成功,服务器返回334应答
if (result != 334) {
}
// 对邮箱用户名进行验证
result = sendToServer (encode.encode (this.message.getUser().getBytes() ) );
if (result != 334) {
}
// 对邮箱密码进行验证
result = sendToServer (encode.encode (message.getPassword().getBytes() ) );
if (result != 235) {
}
}
int result = sendToServer ("MAIL FROM:<" + this.getMessage().getFrom()
+ ">");
if (result != 250) {
}
}
int result = sendToServer ("RCPT TO:<" + this.getMessage().getTo() + ">");
if (result != 250) {
}
}
int result = sendToServer ("DATA");
// 输入date回车后,若收到354应答后,继续输入邮件内容
if (result != 354) {
}
this.getOutput().write ("FROM:" + this.getMessage().getDatafrom() );
this.getOutput().newLine();
this.getOutput().write ("TO:" + this.getMessage().getDatato() );
this.getOutput().newLine();
this.getOutput().write ("SUBJECT:" + this.getMessage().getSubject() );
this.getOutput().newLine();
this.getOutput().newLine();
this.getOutput().write (this.getMessage().getContent() );
this.getOutput().newLine();
// 句点加回车结束邮件内容输入
result = sendToServer (".");
if (result != 250) {
}
}
int result = sendToServer ("QUIT");
if (result != 221) {
}
this.getInput().close();
this.getOutput().close();
}
public boolean sendMail() {
boolean success = true;
try {
// 注册到发送邮件服务器
regist();
// 登陆到服务器
login();
// 设置邮件源地址
setMailFrom();
// 设置邮件目的地址
setMailTo();
// 设置邮件体
setData();
// 退出邮件
quit();
e.printStackTrace();
success = false;
}
return success;
}
}