package servlets;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.UnsupportedEncodingException;
import java.security.GeneralSecurityException;
import java.text.SimpleDateFormat;
import java.util.Properties;
import javax.mail.BodyPart;
import javax.mail.Folder;
import javax.mail.Message;
import javax.mail.MessagingException;
import javax.mail.Multipart;
import javax.mail.NoSuchProviderException;
import javax.mail.Part;
import javax.mail.Session;
import javax.mail.Store;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import javax.mail.internet.MimeMultipart;
import javax.mail.internet.MimeUtility;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.ibatis.io.Resources;
import org.apache.ibatis.session.SqlSession;
import org.apache.ibatis.session.SqlSessionFactory;
import org.apache.ibatis.session.SqlSessionFactoryBuilder;
import com.sun.mail.util.MailSSLSocketFactory;
import entity.User;
/**
* Servlet implementation class ReceiveServlet
*/
@WebServlet("/ReceiveServlet")
public class ReceiveServlet extends HttpServlet {
static SqlSession sqlSession;
public static SqlSession getSqlSession() throws IOException {
String resource = "mybatis/mybatis-config.xml";
InputStream inputStream = Resources.getResourceAsStream(resource);
SqlSessionFactory sqlSessionFactory =
new SqlSessionFactoryBuilder().build(inputStream);
return sqlSessionFactory.openSession();
}
public static User getUserByUsername(String username) throws IOException {
sqlSession = getSqlSession();
String statement = "mapper.userMapper.getUserByUsername";
User user = sqlSession.selectOne(statement,username);
sqlSession.close();
return user;
}
/**
* 判断邮件中是否包含附件
* @param msg 邮件内容
* @return 邮件中存在附件返回true,不存在返回false
*/
public static boolean isContainAttachment(Part part) throws MessagingException, IOException {
boolean flag = false;
if (part.isMimeType("multipart/*")) {
MimeMultipart multipart = (MimeMultipart) part.getContent();
int partCount = multipart.getCount();
for (int i = 0; i < partCount; i++) {
BodyPart bodyPart = multipart.getBodyPart(i);
String disp = bodyPart.getDisposition();
if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {
flag = true;
} else if (bodyPart.isMimeType("multipart/*")) {
flag = isContainAttachment(bodyPart);
} else {
String contentType = bodyPart.getContentType();
if (contentType.indexOf("application") != -1) {
flag = true;
}
if (contentType.indexOf("name") != -1) {
flag = true;
}
}
if (flag)
break;
}
} else if (part.isMimeType("message/rfc822")) {
flag = isContainAttachment((Part) part.getContent());
}
return flag;
}
/**
* 保存附件
* @param part 邮件中多个组合体中的其中一个组合体
* @param destDir 附件保存目录
*/
public static String saveAttachment(Part part, String destDir)
throws UnsupportedEncodingException, MessagingException, FileNotFoundException, IOException {
BodyPart bodyPart=null;
if (part.isMimeType("multipart/*")) {
Multipart multipart = (Multipart) part.getContent(); // 复杂体邮件
// 复杂体邮件包含多个邮件体
int partCount = multipart.getCount();
for (int i = 0; i < partCount; i++) {
// 获得复杂体邮件中其中一个邮件体
bodyPart = multipart.getBodyPart(i);
// 某一个邮件体也有可能是由多个邮件体组成的复杂体
String disp = bodyPart.getDisposition();
if (disp != null && (disp.equalsIgnoreCase(Part.ATTACHMENT) || disp.equalsIgnoreCase(Part.INLINE))) {
InputStream is = bodyPart.getInputStream();
saveFile(is, destDir, decodeText(bodyPart.getFileName()));
} else if (bodyPart.isMimeType("multipart/*")) {
saveAttachment(bodyPart, destDir);
} else {
String contentType = bodyPart.getContentType();
if (contentType.indexOf("name") != -1 || contentType.indexOf("application") != -1) {
saveFile(bodyPart.getInputStream(), destDir, decodeText(bodyPart.getFileName()));
}
}
}
} else if (part.isMimeType("message/rfc822")) {
saveAttachment((Part) part.getContent(), destDir);
}
return decodeText(bodyPart.getFileName());
}
/**
* 读取输入流中的数据保存至指定目录
* @param is 输入流
* @param fileName 文件名
* @param destDir 文件存储目录
*/
private static void saveFile(InputStream is, String destDir, String fileName)
throws FileNotFoundException, IOException {
BufferedInputStream bis = new BufferedInputStream(is);
BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream(new File(destDir + fileName)));
int len = -1;
while ((len = bis.read()) != -1) {
bos.write(len);
bos.flush();
}
bos.close();
bis.close();
}
/**
* 文本解码
* @param encodeText 解码MimeUtility.encodeText(String text)方法编码后的文本
* @return 解码后的文本
*/
public static String decodeText(String encodeText) throws UnsupportedEncodingException {
if (encodeText == null || "".equals(encodeText)) {
return "";
} else {
return MimeUtility.decodeText(encodeText);
}
}
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = (String)request.getSession().getAttribute("username");
User user =getUserByUsername(username);
String address = user.getAddress();//邮箱地址
String authenticator = user.getAuthenticator();//邮箱授权码
String host = "pop.qq.com";//访问邮件服务器pop.qq.com
String protocol = "pop3";//使用pop3协议
Properties props = new Properties();
// 使用的协议(JavaMail规范要求)
props.setProperty("mail.store.protocal", protocol);
// 发件人的邮箱的 SMTP服务器地址
props.setProperty("mail.pop3.host", host);
// QQ邮箱,设置SSL加密(必须要加密)
MailSSLSocketFactory sf = null;
try {
sf = new MailSSLSocketFactory();
} catch (GeneralSecurityException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
sf.setTrustAllHosts(true);
props.put("mail.pop3.ssl.enable", "true");
props.put("mail.pop3.ssl.socketFactory", sf);
// 获取默认session对象
Session session = Session.getDefaultInstance(props);
session.setDebug(false);
// 获取Store对象
Store store = null;
try {
store = session.getStore(protocol);
} catch (NoSuchProviderException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 通过POP3服务器的登陆认证
try {
store.connect(host, address, authenticator);
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 获得收件箱
Folder folder = null;
try {
folder = store.getFolder("INBOX");
} catch (MessagingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
//设置邮件状态
try {
folder.open(Folder.READ_WRITE);
} catch (MessagingException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}// 打开收件箱
// 获得收件箱中的邮件总数
try {
req
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
设计内容: 基于SMTP协议,编写程序模拟邮件系统收发邮件的运行过程。要求具有如下功能: 1、 用户能够注册,登录; 2、 用户能够注册; 3、 用户登录后能查看并编辑用户注册信息;可以发信给其它用户;查看来信,对来信进行回复;能够查看收件箱 设计与实现:本系统采用MVC框架,用maven项目使用Servlet+Jsp+mybatis+javamail的方式设计和实现。配置好数据库后即可运行。 本系统的总体目标是为了实现邮件的发送与收取。其中主要是用户登录并与公网邮箱绑定后,使用SMTP协议向其他邮箱发送邮件、查看收件箱并对收件进行回复
资源推荐
资源详情
资源评论
收起资源包目录
WebChat.rar (58个子文件)
WebChat
.project 1KB
src
test
java
main
webapp
Index.css 1KB
WEB-INF
lib
web.xml 222B
receive.jsp 2KB
register.jsp 857B
mail.jsp 1KB
index.jsp 1KB
Login.css 1KB
information.jsp 1KB
1.jpg 74KB
receive.css 649B
META-INF
MANIFEST.MF 39B
login.jsp 853B
resources
mapper
userMapper.xml 956B
mybatis
mybatis-config.xml 730B
java
mail
Email_Authenticator.java 573B
Sendmail.java 3KB
servlets
ReceiveServlet.java 11KB
InformationServlet.java 3KB
SendServlet.java 5KB
UpdateServlet.java 3KB
LoginServlet.java 3KB
RegServlet.java 4KB
test
Test.java 2KB
ReceiveMail.java 3KB
POP3ReceiveMailTest.java 8KB
entity
User.java 1KB
target
m2e-wtp
web-resources
META-INF
MANIFEST.MF 126B
maven
ss
WebChat
pom.properties 242B
pom.xml 721B
TestMybatis
pom.properties 246B
pom.xml 1KB
org.chat
chat
pom.properties 245B
pom.xml 1KB
classes
mail
Email_Authenticator.class 764B
Sendmail.class 3KB
servlets
LoginServlet.class 3KB
InformationServlet.class 3KB
RegServlet.class 4KB
UpdateServlet.class 3KB
SendServlet.class 5KB
ReceiveServlet.class 10KB
mapper
userMapper.xml 956B
test
ReceiveMail.class 4KB
Test.class 3KB
POP3ReceiveMailTest.class 8KB
entity
User.class 2KB
mybatis
mybatis-config.xml 721B
test-classes
.settings
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.wst.common.project.facet.core.xml 250B
org.eclipse.m2e.core.prefs 90B
org.eclipse.jdt.core.prefs 609B
org.eclipse.wst.validation.prefs 50B
org.eclipse.wst.jsdt.ui.superType.name 6B
org.eclipse.wst.common.component 662B
.jsdtscope 639B
pom.xml 1KB
.classpath 2KB
共 58 条
- 1
中杯可乐多加冰
- 粉丝: 5w+
- 资源: 60
下载权益
C知道特权
VIP文章
课程特权
开通VIP
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
- 4
- 5
- 6
前往页