IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> 基于SMTP协议的模拟邮件系统(计算机网络课程设计) -> 正文阅读

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

一、设计内容

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

二、所用到的知识

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

三、需求分析

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

四、运行效果

1、登录与注册

在这里插入图片描述
输入用户名和密码进行登录。若密码错误则显示
在这里插入图片描述

在这里插入图片描述
或者注册新的用户名和密码

2、信息管理

登录后显示:
在这里插入图片描述
点击注册信息,可以填写或者更改个人信息
在这里插入图片描述

3、邮件发送与收取

发送邮件,可支持向公网所有邮箱发送邮件
在这里插入图片描述
在这里插入图片描述

五、部分核心代码

代码结构:
在这里插入图片描述

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号端口进行监听。
在这里插入图片描述

2、如何实现邮件的读取

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

3、与公网邮箱的绑定

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

在这里插入图片描述

在这里插入图片描述

七、资源下载与学习

1、源码文件

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

2、设计报告

计算机网络课程设计报告

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

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

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2021-08-24 15:54:17  更:2021-08-24 15:55:20 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/25 21:29:30-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码