SMTP 邮件发送

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;
}

}
暂只实现普通邮件内容发送,尚未对附件进行处理

另:附有源码,
希望各位多多指教!
基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip基于MATLAB实现旅行推销员问题(TSP)的代码+项目说明(课程大作业)+测试数据.zip 【备注】 1、该资源内项目代码百分百可运行,请放心下载使用!有问题请及时沟通交流。 2、适用人群:计算机相关专业(如计科、信息安全、数据科学与大数据技术、人工智能、通信、物联网、自动化、电子信息等)在校学生、专业老师或者企业员工下载使用。 3、用途:项目具有较高的学习借鉴价值,不仅适用于小白学习入门进阶。也可作为毕设项目、课程设计、大作业、初期项目立项演示等。 4、如果基础还行,或热爱钻研,亦可在此项目代码基础上进行修改添加,实现其他不同功能。 欢迎下载!欢迎交流学习!不清楚的可以私信问我!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值