邮件发送功能总结
       

第一部分 背景
 
一、使用场景
(1)注册验证
   注册各大网站,通常需要输入邮件地址,在注册成功后,会发送一封邮箱验证的邮件,点击确认,证明这个邮箱是用户自己的
(2)网站营销
   公司运营做活动的时候,提前几天给用户发邮件,提醒老用户在活动时间参加活动。
(3)安全的最后一道防线
   一个网站好久不用的时候,会忘记密码,这个时候需要找回密码,很多种找回方式,最常用的找回方式就是通过邮箱找回密码。
首先,在网站输入邮箱,系统会根据注册的邮箱发送一封邮件,根据邮件中的地址,可以重新设置新的密码。
(4)提醒邮件告警
   如果系统没有监控,将是一种灾难性的事件,系统被实时的监控起来,出了问题,第一时间通知到开发人员,在事态没有扩散,影响最小的时候把问题解决掉。
(5)触发机制
   定时邮件的发送,计算机忘记关机,发送一个特殊的邮件,让计算机自动关机。
 
二、邮件发送原理
 
原理:需要将发送邮件者的邮件,发送到需要发送的接受者的邮箱中,发送过程中需要很多的发送协议。
(1)邮件传输协议:SMTP协议和POP3协议
    SMTP全称 Simple Mail Transfer Protocol,即简单邮件传输协议.一种从源地址到目的地址,邮件传输的规范,通过它控制邮件的中转方式,特点是能在传送中,接力传送邮件,即邮件可以通过不同网络上的主机接力式的传送,SMTP主要负责底层邮件系统如何将邮件从一台服务器传送到另一台机器.
   POP3全称Post Office Protocol,即邮局协议的第三个版本,它规定了怎么将个人计算机连接到Internet服务器和下载电子邮件的电子协议,它也是因特网电子邮件第一个临宪协议标准.POP3允许用户从服务器上把邮件存储到本地主机,同时,删除保存在邮件服务器上的邮件.
(2)内容不断发展:IMAP协议和Mime协议
   IMAP(Internet Mail Access Protocol,Internet邮件访问协议)以前称作交互邮件访问协议(Interactive Mail Access Protocol)。IMAP是斯坦福大学在1986年开发的一种邮件获取协议。它和POP3协议类似,也是邮件访问的标准之一,它和POP3不同的是,它在电子邮件客户端收取的邮件,仍然保存在服务器上,同时在客户端上的操作,都会反馈到服务器上,如在客户端上删除一个邮件,或者标记了邮件已读,那么服务器上的邮件也会相应更改其动作,因此不论从浏览器登录邮箱,还是从客户软件登录邮箱,看到的邮件的状态都是一样的,IMAP协议是对POP3协议的补充.
   MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展类型。SMTP早期是基于ASCII字符文本的,在二进制文本处理上,并不是很好,后来又开发了编码二进制文本,比如MIME,其通过SMTP来传输,所以当今SMTP都支持八位的MIME扩展,它是二进制的传输变得几乎和传文本传输一样简单.
 
三、邮件发送流程
流程概述:
  首先发信人在用户代理上,编辑邮件,写清发件人的邮件地址.
  第二步,用户代理根据发件人编辑的信息,生成一封符合邮件格式的邮件.
  第三步,用户代理把邮件发送到发信人的邮件服务器上,邮件服务器上有一个缓冲队列,发送到邮件服务器的队列,都会进入缓冲队列中,等待邮件服务器上的SMTP客户端进行发送,发件人的邮件服务器是SMTP把这封邮件,发送到收件人的邮件服务器之中
  第五步,收件人的邮件服务器接收邮件之后,把这封邮件放到收件人的邮件服务器的信箱中.
  最后,收件人使用收件代理来收取邮件,
收取方式:用户代理使用POP3来连接收件人所在邮件服务器,之后验证成功之后,用户代理就会把邮件服务器上的邮件读取起来,并且展示给收件人
总结:
  发件人通过发件人的邮件服务器将邮件发送到发送人的DMS服务器中,通过SMTP不断的查询DNS来从一个服务器到另一个服务器,最后传送到收件人的邮箱服务器,收件人通过POP3将邮件下载到本地进行查看.

IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (一)的更多相关文章

  1. IntelliJ IDEA 2017版 spring-boot 2.0.3 邮件发送搭建,概念梳理 (二)

    第二部分 邮件发送历史   一.第一封邮件   1.1969年10月,世界上的第一封电子邮件    1969年10月世界上的第一封电子邮件是由计算机科学家Leonard K.教授发给他的同事的一条简短 ...

  2. Spring Boot 2.0 版的开源项目云收藏来了!

    给大家聊一聊云收藏从 Spring Boot 1.0 升级到 2.0 所踩的坑 先给大家晒一下云收藏的几个数据,作为一个 Spring Boot 的开源项目(https://github.com/cl ...

  3. Spring Boot 2.0 Intellij Idea 中图文详解打包成可执行Jar

    我们使用Spring Boot 2.0 创建好我们的项目后,我们一般需要打包,然后部署到服务器上. 打包步骤: 1. 选中项目,右键——> Open Module Settings. 2. 切换 ...

  4. Spring Boot 2.0正式发布,新特性解读

    作者|翟永超 Spring Boot 2.0 来啦,有哪些新特性?升级吗? 写在前面 北京时间 3 月 1 日,经过漫长的等待之后,Spring Boot 2.0 正式发布.作为 Spring 生态中 ...

  5. Spring Boot 2.0 的快速入门(图文教程)

    摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘要,谢谢! Spring Boot 2.0 的快速入门(图文教程) 大家都 ...

  6. Spring Boot 2.0 入门指南

    0x01 什么是Spring Boot? Spring Boot是用来简化Spring应用初始搭建以及开发过程的全新框架,被认为是Spring MVC的“接班人”,和微服务紧密联系在一起. 0x02 ...

  7. Spring Boot 2.0 返回JSP页面实战

    1. 模板引擎JSP的限制 在开始之前呢,我觉得我们有必要先去了解下 Spring Boot 2.0 官方文档中提到的如下内容: 模板引擎 除了REST Web服务之外,还可以使用Spring MVC ...

  8. Spring Boot 2.0 热部署指南

    Spring Boot 2.0 支持热部署,实现方法很简单 Spring Boot 2.0 有几种热重载的选项. 推荐的方法是使用spring-boot-devtools 因为它提供了额外的开发时间功 ...

  9. spring boot 2.0.3+spring cloud (Finchley)7、服务链路追踪Spring Cloud Sleuth

    参考:Spring Cloud(十二):分布式链路跟踪 Sleuth 与 Zipkin[Finchley 版] Spring Cloud Sleuth 是Spring Cloud的一个组件,主要功能是 ...

随机推荐

  1. selenium学习一

    chrome版本和chromedriver的对应关系 chromedriver版本 支持的Chrome版本 v2.40 v66-68 v2.39 v66-68 v2.38 v65-67 v2.37 v ...

  2. Head First Servlets & JSP 学习笔记 第五章 —— 作为Web应用

    初始化参数:(init-param) 初始化参数写在web.xml文件中:(写在<servlet>标签内部) <servlet> <servlet-name>Bee ...

  3. 34-BigInteger详解

    在用C或者C++处理大数时感觉非常麻烦,但是在Java中有两个类BigInteger和BigDecimal分别表示大整数类和大浮点数类,至于两个类的对象能表示最大范围不清楚,理论上能够表示无线大的数, ...

  4. setTimeout设置为0的意义

    今天再看 Promise 代码时,有个地方用到了setTimeOut函数,但是第2个参数设为0,顿时懵逼了,这是啥意思? function resolve(newValue) { value = ne ...

  5. Django中反向生成models

    我们在展示django ORM反向生成之前,我们先说一下怎么样正向生成代码. 正向生成,指的是先创建model.py文件,然后通过django内置的编译器,在数据库如mysql中创建出符合model. ...

  6. Beanstalkd消息队列的安装与使用

    一.Beanstalkd是什么? Beanstalkd是一个高性能,轻量级的分布式内存队列 二.Beanstalkd特性 1.支持优先级(支持任务插队)2.延迟(实现定时任务)3.持久化(定时把内存中 ...

  7. node.js下载安装

    1.下载node.js在node中文网站,官方网站下载太慢 2.接着让我们点击下载链接,页面上呈现出你所需要下载的安装包,我们这里选择windows x64的安装包进行下载 3.安装node.js,一 ...

  8. opencv 形态学操作应用-提取水平与垂直线

    adaptiveThreshold(~gray_src, binImg, , ADAPTIVE_THRESH_MEAN_C, THRESH_BINARY, , -); #include <ope ...

  9. mybatis进阶--输入映射和输出映射

    我们知道,mapper.xml是我们配置操作数据库的sql语句的地方.其中每个sql语句对应着一个方法,每个方法都有自己的输入输出参数类型.那么这些类型都是怎么配置的呢?今天我们来一起学习下. 输入映 ...

  10. git回退文件修改

    假设git仓库某个文件的提交信息如下: [cxy@localhost-live mate-power-manager]$ git log -n3 SPECS/mate-power-manager.sp ...