SMTP方式邮件发送
/**
* 邮件发送 处理邮件发送过程中的一系列问题
* 明
* 2010-03-12
*/:
package com.ming.util.email;
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 SmtpEmail {
// 用户名/密码加密
private BASE64Encoder encode = new BASE64Encoder();
// 套接字对象
private Socket socket;
public SmtpEmail() {}
/**
* 连接服务器
* @param emailMessage
*/
private void setSocket(EmailMessage emailMessage) {
try {
if(emailMessage.getServer() != null
&& !emailMessage.getServer().equals("")
&& emailMessage.getPort() != 0) {
this.socket = new Socket(emailMessage.getServer(),
emailMessage.getPort());
} else {
throw new NullPointerException("连接参数错误!");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("服务器连接成功!");
}
}
/**
* 注册到服务器
* @param emailMessage
*/
private void registerServer(EmailMessage emailMessage) {
int result;
result = getResult(emailMessage);
// 判断是否连接
if(result != 220) {
try {
throw new IOException("服务器注册失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
// 发送消息确认
sendMessage("helo " + emailMessage.getServer(), emailMessage);
}
/**
* 发送消息
* @param message
* @param emailMessage
* @return
*/
private int sendMessage(String message, EmailMessage emailMessage) {
try {
emailMessage.getWriter().write(message);
emailMessage.getWriter().newLine();
emailMessage.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
return getResult(emailMessage);
}
/**
* 用户登录连接
* @param emailMessage
*/
private void userLogin(EmailMessage emailMessage) {
int result;
result = sendMessage("auth login", emailMessage);
if(result != 334) {
try {
throw new IOException("用户验证失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage(encode.encode(emailMessage.getUserName().getBytes()),
emailMessage);
if(result != 334) {
try {
throw new IOException("用户名错误!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage(encode.encode(emailMessage.getPassword().getBytes()),
emailMessage);
if(result != 235) {
try {
throw new IOException("密码错误!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 发送收件人 发件人
* @param emailMessage
*/
private void setFromTo(EmailMessage emailMessage) {
int result;
result = sendMessage("mail from:<" + emailMessage.getFrom() + ">", emailMessage);
if(result != 250) {
try {
throw new IOException("发件人不存在!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage("rcpt to:<" + emailMessage.getTo() + ">", emailMessage);
if(result != 250) {
try {
throw new IOException("收件人不存在!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 发送邮件内容
* @param emailMessage
*/
private void setEmailContent(EmailMessage emailMessage) {
int result;
result = sendMessage("data", emailMessage);
if(result != 354) {
try {
throw new IOException("数据无法传送!");
} catch (IOException e) {
e.printStackTrace();
}
}
try {
emailMessage.getWriter().write("From: " + emailMessage.getFrom());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("To: " + emailMessage.getTo());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("Subject: " + emailMessage.getSubject());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("Content-Type: text/html");
emailMessage.getWriter().newLine();
emailMessage.getWriter().newLine();
emailMessage.getWriter().write(emailMessage.getContent());
emailMessage.getWriter().newLine();
result = sendMessage(".", emailMessage);
} catch (IOException e) {
e.printStackTrace();
}
if(result != 250) {
try {
throw new IOException("邮件发送失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 退出
* @param emailMessage
*/
private void quit(EmailMessage emailMessage) {
int result;
result = sendMessage("quit", emailMessage);
if(result != 221) {
try {
throw new IOException("退出失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 读取服务器返回消息状态
* @param emailMessage
* @return
*/
private int getResult(EmailMessage emailMessage) {
int result;
String readLine = "";
try {
// 读取服务器返回消息
readLine = emailMessage.getReader().readLine();
} catch (IOException e) {
e.printStackTrace();
}
// 读取服务器返回消息状态码 转换为整数
StringTokenizer tokenizer = new StringTokenizer(readLine, " ");
result = Integer.parseInt(tokenizer.nextToken());
// 返回
return result;
}
/**
* 邮件发送
* @param emailMessage
*/
public void sendEmail(EmailMessage emailMessage){
setSocket(emailMessage);
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
emailMessage.setReader(reader);
emailMessage.setWriter(writer);
registerServer(emailMessage);
userLogin(emailMessage);
setFromTo(emailMessage);
setEmailContent(emailMessage);
quit(emailMessage);
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("邮件发送成功!\n请查收!");
}
}
}
实体类1:
package com.ming.util.email;
import java.io.BufferedReader;
import java.io.BufferedWriter;
/**
* 邮件实体 相关邮件消息
* 明
* 2010-03-12
*/
public class EmailMessage {
// 发件人
private String from;
// 收件人
private String to;
// 用户名
private String userName;
// 密码
private String password;
// 标题
private String subject;
// 内容
private String content;
// 服务器
private String server;
// 端口
private int port;
// 读取流
private BufferedReader reader;
// 写入流
private BufferedWriter writer;
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
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 String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public BufferedReader getReader() {
return reader;
}
public void setReader(BufferedReader reader) {
this.reader = reader;
}
public BufferedWriter getWriter() {
return writer;
}
public void setWriter(BufferedWriter writer) {
this.writer = writer;
}
}
暂只实现普通邮件内容发送,尚未对附件进行处理
另:附有源码,
希望各位多多指教!
/**
* 邮件发送 处理邮件发送过程中的一系列问题
* 明
* 2010-03-12
*/:
package com.ming.util.email;
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 SmtpEmail {
// 用户名/密码加密
private BASE64Encoder encode = new BASE64Encoder();
// 套接字对象
private Socket socket;
public SmtpEmail() {}
/**
* 连接服务器
* @param emailMessage
*/
private void setSocket(EmailMessage emailMessage) {
try {
if(emailMessage.getServer() != null
&& !emailMessage.getServer().equals("")
&& emailMessage.getPort() != 0) {
this.socket = new Socket(emailMessage.getServer(),
emailMessage.getPort());
} else {
throw new NullPointerException("连接参数错误!");
}
} catch (UnknownHostException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("服务器连接成功!");
}
}
/**
* 注册到服务器
* @param emailMessage
*/
private void registerServer(EmailMessage emailMessage) {
int result;
result = getResult(emailMessage);
// 判断是否连接
if(result != 220) {
try {
throw new IOException("服务器注册失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
// 发送消息确认
sendMessage("helo " + emailMessage.getServer(), emailMessage);
}
/**
* 发送消息
* @param message
* @param emailMessage
* @return
*/
private int sendMessage(String message, EmailMessage emailMessage) {
try {
emailMessage.getWriter().write(message);
emailMessage.getWriter().newLine();
emailMessage.getWriter().flush();
} catch (IOException e) {
e.printStackTrace();
}
return getResult(emailMessage);
}
/**
* 用户登录连接
* @param emailMessage
*/
private void userLogin(EmailMessage emailMessage) {
int result;
result = sendMessage("auth login", emailMessage);
if(result != 334) {
try {
throw new IOException("用户验证失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage(encode.encode(emailMessage.getUserName().getBytes()),
emailMessage);
if(result != 334) {
try {
throw new IOException("用户名错误!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage(encode.encode(emailMessage.getPassword().getBytes()),
emailMessage);
if(result != 235) {
try {
throw new IOException("密码错误!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 发送收件人 发件人
* @param emailMessage
*/
private void setFromTo(EmailMessage emailMessage) {
int result;
result = sendMessage("mail from:<" + emailMessage.getFrom() + ">", emailMessage);
if(result != 250) {
try {
throw new IOException("发件人不存在!");
} catch (IOException e) {
e.printStackTrace();
}
}
result = sendMessage("rcpt to:<" + emailMessage.getTo() + ">", emailMessage);
if(result != 250) {
try {
throw new IOException("收件人不存在!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 发送邮件内容
* @param emailMessage
*/
private void setEmailContent(EmailMessage emailMessage) {
int result;
result = sendMessage("data", emailMessage);
if(result != 354) {
try {
throw new IOException("数据无法传送!");
} catch (IOException e) {
e.printStackTrace();
}
}
try {
emailMessage.getWriter().write("From: " + emailMessage.getFrom());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("To: " + emailMessage.getTo());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("Subject: " + emailMessage.getSubject());
emailMessage.getWriter().newLine();
emailMessage.getWriter().write("Content-Type: text/html");
emailMessage.getWriter().newLine();
emailMessage.getWriter().newLine();
emailMessage.getWriter().write(emailMessage.getContent());
emailMessage.getWriter().newLine();
result = sendMessage(".", emailMessage);
} catch (IOException e) {
e.printStackTrace();
}
if(result != 250) {
try {
throw new IOException("邮件发送失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 退出
* @param emailMessage
*/
private void quit(EmailMessage emailMessage) {
int result;
result = sendMessage("quit", emailMessage);
if(result != 221) {
try {
throw new IOException("退出失败!");
} catch (IOException e) {
e.printStackTrace();
}
}
}
/**
* 读取服务器返回消息状态
* @param emailMessage
* @return
*/
private int getResult(EmailMessage emailMessage) {
int result;
String readLine = "";
try {
// 读取服务器返回消息
readLine = emailMessage.getReader().readLine();
} catch (IOException e) {
e.printStackTrace();
}
// 读取服务器返回消息状态码 转换为整数
StringTokenizer tokenizer = new StringTokenizer(readLine, " ");
result = Integer.parseInt(tokenizer.nextToken());
// 返回
return result;
}
/**
* 邮件发送
* @param emailMessage
*/
public void sendEmail(EmailMessage emailMessage){
setSocket(emailMessage);
try {
BufferedReader reader = new BufferedReader(new InputStreamReader(this.socket.getInputStream()));
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(this.socket.getOutputStream()));
emailMessage.setReader(reader);
emailMessage.setWriter(writer);
registerServer(emailMessage);
userLogin(emailMessage);
setFromTo(emailMessage);
setEmailContent(emailMessage);
quit(emailMessage);
} catch (IOException e) {
e.printStackTrace();
} finally {
System.out.println("邮件发送成功!\n请查收!");
}
}
}
实体类1:
package com.ming.util.email;
import java.io.BufferedReader;
import java.io.BufferedWriter;
/**
* 邮件实体 相关邮件消息
* 明
* 2010-03-12
*/
public class EmailMessage {
// 发件人
private String from;
// 收件人
private String to;
// 用户名
private String userName;
// 密码
private String password;
// 标题
private String subject;
// 内容
private String content;
// 服务器
private String server;
// 端口
private int port;
// 读取流
private BufferedReader reader;
// 写入流
private BufferedWriter writer;
public String getFrom() {
return from;
}
public void setFrom(String from) {
this.from = from;
}
public String getTo() {
return to;
}
public void setTo(String to) {
this.to = to;
}
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 String getSubject() {
return subject;
}
public void setSubject(String subject) {
this.subject = subject;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public String getServer() {
return server;
}
public void setServer(String server) {
this.server = server;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
public BufferedReader getReader() {
return reader;
}
public void setReader(BufferedReader reader) {
this.reader = reader;
}
public BufferedWriter getWriter() {
return writer;
}
public void setWriter(BufferedWriter writer) {
this.writer = writer;
}
}
暂只实现普通邮件内容发送,尚未对附件进行处理
另:附有源码,
希望各位多多指教!