项目介绍

本项目为基于SSM的邮件收发管理系统;

用户角色包含以下功能:

用户登录,写信给好友,查看收件箱,查看已发送的邮件,草稿箱查看,通讯录设置,个人资料管理等功能。

环境需要

1.运行环境:最好是java jdk 1.8,我们在这个平台上运行的。其他版本理论上也可以。
2.IDE环境:IDEA,Eclipse,Myeclipse都可以。推荐IDEA;
3.tomcat环境:Tomcat 7.x,8.x,9.x版本均可
4.硬件环境:windows 7/8/10 1G内存以上;或者 Mac OS; 

5.数据库:MySql 5.7版本;

6.是否Maven项目:否;

技术栈

1. 后端:Spring+SpringMVC+Mybatis

2. 前端:JSP+CSS+JavaScript+jQuery

使用说明

1. 使用Navicat或者其它工具,在mysql中创建对应名称的数据库,并导入项目的sql文件;
2. 使用IDEA/Eclipse/MyEclipse导入项目,Eclipse/MyEclipse导入时,若为maven项目请选择maven;
若为maven项目,导入成功后请执行maven clean;maven install命令,然后运行;
3. 将项目中config/db.properties配置文件中的数据库配置改为自己的配置;

4. 运行项目,输入localhost:8080/xx 登录

运行截图

java 开源邮件服务器软件 java邮件管理系统_java 开源邮件服务器软件

java 开源邮件服务器软件 java邮件管理系统_User_02

java 开源邮件服务器软件 java邮件管理系统_java_03

java 开源邮件服务器软件 java邮件管理系统_开发语言_04

java 开源邮件服务器软件 java邮件管理系统_java_05

java 开源邮件服务器软件 java邮件管理系统_User_06

java 开源邮件服务器软件 java邮件管理系统_User_07

相关代码

Email控制器

package com.email.controller.email;

import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.multipart.MultipartFile;

import com.email.po.Email;
import com.email.po.EmailId;
import com.email.po.Save;
import com.email.po.User;
import com.email.service.EmailService;
import com.email.service.SaveService;
import com.email.service.UserService;

import sun.security.provider.MD5;

import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.URLEncoder;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Comparator;
import java.util.Date;
import java.util.List;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;

@Controller
@RequestMapping("/email")
public class EmailController {
	
	@Autowired
	private EmailService emailService;
	
	@Autowired
	private SaveService saveService;
	
	@Autowired
	private UserService userService;
	
	@RequestMapping(value="/upload/{type}",method=RequestMethod.POST)
	public String upLoad(Email email,Save save,String userid,HttpServletRequest request,HttpSession session,@PathVariable Integer type,
			@RequestParam(value="file") MultipartFile pic) {
		User u = (User)session.getAttribute("user");
		if(u==null)
			return "login";
		//检查收件人地址是否为空
		if(email.getAddresserId()==null||email.getAddresserId().trim().equals("")) {
			request.setAttribute("error", "请输入收件人邮箱");
			return "send";
		}
		//检查收件人地址是否存在
		boolean flag = userService.checkItExist(userid);
		if(flag==true) {
			request.setAttribute("error", "该收件人不存在!");
			return "send";
		}
		if(email.getTitle()==null||email.getTitle().trim().equals("")) {
			request.setAttribute("error", "主题填写不完整!");
			return "send";
		}
		String originalFileName;
		String path;
		if(pic==null||pic.getSize()==0) {
			originalFileName = "无附件";
			path = "";
		}else {
			//获取文件的原始名称
			originalFileName = pic.getOriginalFilename();
			//上传文件,返回的path是存放在服务器中的文件路径
			path = upLoadFile(pic);
			//所有检验完毕后把email信息填写完整之后添加到数据库	
		}
		if(type==0) {
			Date date=new Date();
		    email.setAddresseeId(u.getUserid());
			email.setTime(date);
			email.setFilename(originalFileName);
			email.setFilepath(path);
			//获取ID
			int id = emailService.getTheLastId();
			email.setId(id);
			email.setReaded(0);
			emailService.addMail(email);
		}else {
			Date date=new Date();
		    save.setAddresseeId(u.getUserid());
			save.setTime(date);
			save.setFilename(originalFileName);
			save.setFilepath(path);
			//获取ID
			int id = saveService.getTheLastId();
			save.setId(id);
			save.setReaded(0);
			saveService.addSave(save);
		}
		request.setAttribute("success", "操作成功!");
		request.setAttribute("email", null);
		request.setAttribute("save", null);
		return "send";
	}
	
	//附件上传方法
	public String upLoadFile(MultipartFile file){
		String path = null;
		//首先获取文件原始名称,目的在于获取上传文件的后缀名
		String originalName = file.getOriginalFilename();
		//获取文件后缀名,要求是png、jpg、gif、jpeg
		String suffix = originalName.substring(originalName.lastIndexOf('.'));
		if(suffix.equalsIgnoreCase(".bat")||suffix.equalsIgnoreCase(".exe")){
			return null;
		}
		//创建新的文件名
		String newFileName = UUID.randomUUID()+originalName.substring(originalName.lastIndexOf('.'));
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
		File f;
		//设置路径
		//创建文件夹路径,创建的文件夹路径有级数限制。注意
			path = Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(0,Thread.currentThread().getContextClassLoader().getResource("").getPath().length()-16)+"/file/"+sdf.format(new Date())+"\\";
			File pat = new File(path);
			pat.mkdirs();
			path = path+newFileName;
			f = new File(path);
		try {
			file.transferTo(f);
		} catch (Exception e) {
			e.printStackTrace();
		}
		return "/file/"+sdf.format(new Date())+"/"+newFileName;
	}
	
	/*
	 * 该方法用来查看我的收件箱
	 * 
	 * */
	@RequestMapping("/myReceive/{userid}")
	public String myReceive(HttpSession session,HttpServletRequest request,@PathVariable String userid) {
		//检查用户是否已经注销,或者浏览器已清除用户缓存,如果清除,则需要重新登录
		User u = (User)session.getAttribute("user");
		if(u==null)
			return "login";
		System.out.println(userid);
		//获取指定收件人的所有邮件
		List<Email> list = emailService.selectByErId(userid+".com");
		List<Email> finalList = new ArrayList<Email>();
		for (Email email : list) {
			if(email.getReaded()!=2) {
				finalList.add(email);
			}
		}
		//按已读和未读来排序,未读的优先显示
		finalList.sort(new Comparator<Email>() {
			public int compare(Email o1, Email o2) {
				return o1.getReaded()-o2.getReaded();
			}
			
		});
		request.setAttribute("emails", finalList);
		return "receiveEmail";
	}
	
	/*
	 * 该方法完成邮件查看的功能
	 * 
	 * */
	@RequestMapping(value="/look/{id}",method=RequestMethod.GET)
	public String look(@PathVariable int id,HttpSession session,HttpServletRequest request) {
		//检查用户是否已经注销,或者浏览器已清除用户缓存,如果清除,则需要重新登录
		User u = (User)session.getAttribute("user");
		if(u==null)
			return "login";
		
		Email email = emailService.getEmailById(id);
		request.setAttribute("email", email);
		
		return "email_info";
	}
	
	/*
	 *  完成下载附件的功能。也就是当用户查看邮件时可以点击下载
	 * 
	 * */
	@RequestMapping(value="/downloadFile/{id}",method=RequestMethod.GET)
	public void downloadFile(HttpServletRequest request,HttpServletResponse response,@PathVariable int id) throws IOException {
		Email email=emailService.getEmailById(id);
        File file = new File(Thread.currentThread().getContextClassLoader().getResource("").getPath().substring(0,Thread.currentThread().getContextClassLoader().getResource("").getPath().length()-16)
+"/"+email.getFilepath());
        System.out.println(file.getAbsolutePath());
        //如果文件不存在
        if(!file.exists()){
        	response.setCharacterEncoding("UTF-8");
        	//则向前台报告文件已被删除
        	response.getWriter().println("<script type='text/javascript'>alert('file has been delete!')</script>");
        	return;
        }
        //处理文件名,用真实的文件名导出
        String realname=email.getFilename();
        //设置响应头,控制浏览器下载该文件
        response.setHeader("content-disposition", "attachment;filename=" + URLEncoder.encode(realname, "UTF-8"));
        //读取要下载的文件,保存到文件输入流
        FileInputStream in = new FileInputStream(file);
        //创建输出流
        OutputStream out = response.getOutputStream();
        //创建缓冲区
        byte buffer[] = new byte[1024];
        int len = 0;
        //循环将输入流中的内容读取到缓冲区当中
        while((len=in.read(buffer))>0){
            //输出缓冲区的内容到浏览器,实现文件下载
            out.write(buffer, 0, len);
        }
       
	}
	
	//按条件查询满足条件的邮件
	/*
	 * 1.发件人
	 * 2.标题
	 * 3.未读、已读
	 * 
	 * */
	@RequestMapping("/select/{userid}")
	public String select(Email email,HttpServletRequest request,@PathVariable String userid) {
		List<Email> list = emailService.selectByOptions(email,(userid+".com"));
		request.setAttribute("emails", list);
		return "receiveEmail";
	}
	
	//查看自己的发件箱,userid是自己的邮箱账号
	@RequestMapping("/send/{userid}")
	public String send(HttpServletRequest request,@PathVariable String userid) {
		//获取自己以往所有发送过的邮件,查询条件是根据自己的邮箱账号。
		List<Email> list = emailService.selectByEeId(userid+".com");
		for (Email email : list) {
			System.out.println(email.getTitle());
		}
		List<Email> finalList = new ArrayList<Email>();
		for (Email email : list) {
			if(email.getReaded()!=3&&email.getReaded()!=4) {
				finalList.add(email);
			}
		}
		request.setAttribute("emails", finalList);
		return "sendEmails";
	}
	
	/*
	 * 该方法用来删除指定的(收件)邮件,
	 * 这里有要注意的地方,因为邮件是一份的,且是发件人和收件人共享的,如果直接执行删除数据库中的操作,那么势必会影响另一方,
	 * 这里的处理方法是利用邮件的readed字段来进行处理,readed字段值为0时表示未读,1表示已读,2表示收件人删除,3表示发件人
	 * 删除且邮件未读,4表示发件人删除且邮件已读
	 * */
	@RequestMapping("reDelete/{id}")
	public String reDelete(HttpServletRequest request,@PathVariable String id) {
		//调用service里的delete方法。
		emailService.reDelete(Integer.parseInt(id));
		//获取指定收件人的所有邮件
		User currentUser  = (User)request.getSession().getAttribute("user");
		String userid = currentUser.getUserid();
		List<Email> list = emailService.selectByErId(userid);
		List<Email> finalList = new ArrayList<Email>();
		for (Email email : list) {
			if(email.getReaded()!=2) {
				finalList.add(email);
			}
		}
		//按已读和未读来排序,未读的优先显示
		finalList.sort(new Comparator<Email>() {
			public int compare(Email o1, Email o2) {
				return o1.getReaded()-o2.getReaded();
			}
		});
		request.setAttribute("emails", finalList);
		return "receiveEmail";
	}
	
	/*
	 * 该方法用来删除指定的(发件)邮件
	 * */
	@RequestMapping("seDelete/{id}")
	public String seDelete(HttpServletRequest request,@PathVariable int id) {
		//调用service里的delete方法。
		emailService.sedelete(id);
		//获取指定发件人的所有邮件
		User currentUser  = (User)request.getSession().getAttribute("user");
		String userid = currentUser.getUserid();
		List<Email> list = emailService.selectByEeId(userid);
		List<Email> finalList = new ArrayList<Email>();
		for (Email email : list) {
			if(email.getReaded()!=3&&email.getReaded()!=4) {
				finalList.add(email);
			}
		}
		//按已读和未读来排序,未读的优先显示
		finalList.sort(new Comparator<Email>() {

			public int compare(Email o1, Email o2) {
				return o1.getReaded()-o2.getReaded();
			}
			
		});
		request.setAttribute("emails", finalList);
		return "sendEmails";
	}
	
	//设置邮件为已读
	@RequestMapping("/setReaded/{id}")
	public String setReaded(HttpServletRequest request,@PathVariable int id) {
		emailService.setEmailReaded(id);
		//获取指定收件人的所有邮件
		User currentUser  = (User)request.getSession().getAttribute("user");
		String userid = currentUser.getUserid();
		List<Email> list = emailService.selectByErId(userid);
		List<Email> finalList = new ArrayList<Email>();
		for (Email email : list) {
			if(email.getReaded()!=2) {
				finalList.add(email);
			}
		}
		//按已读和未读来排序,未读的优先显示
		finalList.sort(new Comparator<Email>() {
			public int compare(Email o1, Email o2) {
				return o1.getReaded()-o2.getReaded();
			}
			
		});
		request.setAttribute("emails", finalList);
		return "receiveEmail";
	}
	
	//批量删除收件箱
	@RequestMapping("/reListdel")
	public String ids(HttpServletRequest request,EmailId ids) {
		List<Integer> list = ids.getId();
		emailService.listDelete(list);
		//获取指定收件人的所有邮件
		User currentUser  = (User)request.getSession().getAttribute("user");
		String userid = currentUser.getUserid();
		List<Email> alllist = emailService.selectByErId(userid);
		List<Email> finalList = new ArrayList<Email>();
		for (Email email : alllist) {
			if(email.getReaded()!=2) {
				finalList.add(email);
			}
		}
		//按已读和未读来排序,未读的优先显示
		finalList.sort(new Comparator<Email>() {
			public int compare(Email o1, Email o2) {
				return o1.getReaded()-o2.getReaded();
			}
		});
		request.setAttribute("emails", finalList);
		return "receiveEmail";
	}
	//批量删除发件箱
	@RequestMapping("/seListdel")
	public String seListdel(HttpServletRequest request,EmailId ids) {
		List<Integer> list = ids.getId();
		emailService.seListDelete(list);
		//获取指定发件人的所有邮件
		User currentUser  = (User)request.getSession().getAttribute("user");
		String userid = currentUser.getUserid();
		List<Email> alllist = emailService.selectByEeId(userid);
		List<Email> finalList = new ArrayList<Email>();
		for (Email email : alllist) {
			if(email.getReaded()!=3&&email.getReaded()!=4) {
				finalList.add(email);
			}
		}
		//按已读和未读来排序,未读的优先显示
		finalList.sort(new Comparator<Email>() {
			public int compare(Email o1, Email o2) {
				return o1.getReaded()-o2.getReaded();
			}
		});
		request.setAttribute("emails", finalList);
		return "sendEmails";
	}
	//转发路由
	@RequestMapping("/transmit/{id}")
	public String transmit(HttpServletRequest request,@PathVariable int id) {
		request.setAttribute("id", id);
		return "transmit";
	}
	//转发邮件
	@RequestMapping("/toTrans")
	public String toTrans(HttpServletRequest request,int id,String userid) {
		Email email = emailService.getEmailById(id);
		email.setAddresserId(userid);
		int lastId = emailService.getTheLastId();
		email.setId(lastId);
		email.setReaded(0);
		emailService.addMail(email);
		request.setAttribute("msg", "转发成功!");
		return "transmit";
	}
}