基于SMTP协议的模拟邮件系统(计算机网络课程设计)

目录

  • 一、设计内容
  • 二、所用到的知识
  • 三、需求分析
  • 四、运行效果
    • 1、登录与注册
    • 2、信息管理
    • 3、邮件发送与收取
  • 五、部分核心代码
    • 1、SendServlet.java(实现邮件发送)
    • 2、ReceiveServlet.java(实现邮件收取)
  • 六、原理解析
    • 1、如何实现邮件的发送
    • 2、如何实现邮件的读取
    • 3、与公网邮箱的绑定
  • 七、资源下载与学习
    • 1、源码文件
    • 2、设计报告
    • 3、模块设计图(visio设计)
  • 联系作者

一、设计内容

基于SMTP协议,编写程序模拟邮件系统收发邮件的运行过程。要求具有如下功能:
1、 用户能够注册,登录;
2、 用户能够注册;
3、 用户登录后
 查看并编辑用户注册信息;
 可以发信给其它用户,可以连上公网,给公网任何邮箱发邮件(如QQ邮箱);
 查看来信,对来信进行回复;
 可以收取来信中的附件,并存储到计算机上;

二、所用到的知识

IDE:Eclipse
数据库:mysql
技术:Servlet+Jsp+mybatis+javamail
协议:SMTP实现邮件发送,POP3实现邮件收取

三、需求分析

模拟邮箱系统主要分为注册、登录、查看和更改个人注册信息、发送邮件、查看收件箱五大模块。用户注册并登录后,可查看个人注册信息、修改个人信息、绑定自己的公网邮箱后,可以向任意邮箱发送邮件、可以查看自己的收件箱

四、运行效果

1、登录与注册

基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第1张图片
输入用户名和密码进行登录。若密码错误则显示
基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第2张图片

基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第3张图片
或者注册新的用户名和密码

2、信息管理

登录后显示:
基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第4张图片
点击注册信息,可以填写或者更改个人信息
基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第5张图片

3、邮件发送与收取

发送邮件,可支持向公网所有邮箱发送邮件
基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第6张图片
基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第7张图片

五、部分核心代码

代码结构:
基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第8张图片

1、SendServlet.java(实现邮件发送)

public static void send_email(String toEmail,String subjects,String contents,String myaddress,String myauthenticator2) throws IOException, AddressException, MessagingException{
       // 收件人地址,邮件主题,邮件内容,发件人地址,发件人邮箱授权码
		String to = toEmail;
        String subject = subjects;
        String content = contents;      
        String myaddress1 = myaddress;
        String myauthenticator1 = myauthenticator2;
        
        Properties properties = new Properties();
        properties.put("mail.smtp.host", "smtp.qq.com");//邮件服务器主机名
        properties.put("mail.smtp.port", "25");//端口号
        properties.put("mail.smtp.auth", "true");   //发送服务器需要身份验证   
        
        Authenticator authenticatorTemp = new Email_Authenticator(myaddress1, myauthenticator1);
        javax.mail.Session sendMailSession = javax.mail.Session.getDefaultInstance(properties, authenticatorTemp);
        MimeMessage mailMessage = new MimeMessage(sendMailSession);
        mailMessage.setFrom(new InternetAddress(myaddress1));      
        
        // Message.RecipientType.TO属性表示接收者的类型为TO
        mailMessage.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
        mailMessage.setSubject(subject, "UTF-8");
        mailMessage.setSentDate(new Date());     
        
        // MiniMultipart类是一个容器类,包含MimeBodyPart类型的对象
        Multipart mainPart = new MimeMultipart();      
        
        // 创建一个包含HTML内容的MimeBodyPart
        BodyPart html = new MimeBodyPart();
        html.setContent(content.trim(), "text/html; charset=utf-8");
        mainPart.addBodyPart(html);
        mailMessage.setContent(mainPart);
        Transport.send(mailMessage);
    }

2、ReceiveServlet.java(实现邮件收取)

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();
			}// 打开收件箱

六、原理解析

1、如何实现邮件的发送

可以与QQ邮箱进行绑定并使用SMTP协议,SMTP协议是简单邮件传输协议,SMTP是建立在FTP文件传输服务上的一种邮件服务,主要用于系统之间的邮件信息传递,并提供有关来信的通知。
SMTP协议包括了连接建立、邮件传送和连接释放三个具体过程,建立的是TCP连接,SMTP协议调用TCP协议的25号端口进行监听。
基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第9张图片

2、如何实现邮件的读取

使用POP3协议,POP3协议提供了一种对邮件消息进行排队的标准机制,这样接收者以后才能检索邮件。
POP3协议也运行在TCP/IP之上,并且在默认端口110上进行监听。
将邮件的主题、发件人、发送时间、邮件大小、邮件正文分别存在数组中,通过Session传值,然后读取。

3、与公网邮箱的绑定

打开公网邮箱页面(如qq邮箱),打开邮箱的POP3/SMTP服务,获取其授权码,将公网邮箱号与授权码填入项目个人信息栏中就可以连接上公网。

基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第10张图片

基于SMTP协议的模拟邮件系统(计算机网络课程设计)_第11张图片

七、资源下载与学习

1、源码文件

eclipse工程,导入项目,配置好数据库和相关设置就可以直接运行
计算机网络课程设计:基于SMTP协议的模拟邮件系统

2、设计报告

计算机网络课程设计报告 基于SMTP协议的模拟邮件系统

3、模块设计图(visio设计)

计算机网络课设 模拟邮件系统模块设计图

联系作者

不会配置可以私信我,每天会看私信。(工作q号:2215991436)

你可能感兴趣的:(笔记,心源易码,数据库,eclipse,maven,javamail,模拟邮件)