在《使用Spring Boot 优雅地发送邮件》中,我们实现了spring boot集成spring-boot-starter-mail,使用JavaMailSender发送电子邮件的功能。在配置文件中设置了端口和邮件传输协议,现在思考一个问题——它们是什么呢?这里就剥茧抽丝般的揭开其神秘面纱。

1. 三种邮件传输协议概述

作为一个勤学好问的程序猿,我们当然也要了解下邮件发送的协议,这个是关乎邮件发送的最根本的内容。

在上述邮件发送的过程中,邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行邮件传递,是要遵守一定的规则,这个规则就是邮件传输协议。常见的电子邮件协议SMTP、POP3、IMAP,它们都隶属于TCP/IP协议族,默认状态下,分别通过TCP端口25、110和143建立连接。下面分别对其进行简单介绍。

  1. SMTP:简单邮件传输协议(Simple Mail Transfer Protocol),用于发送电子邮件的传输协议;主要用来从邮件客户端向邮件服务器发送邮件,也可以用来在邮件服务器之间转发邮件。
  2. POP3:Post Office Protocol,用于接收电子邮件的标准协议;
  3. IMAP:全称是 Internet Message Access Protocol,互联网消息协议,是POP3的代替协议;

后两者用来从邮件服务器获取邮件。

这三种协议都有对应SSL加密传输的协议,分别是SMTPS,POP3S和IMAPS。下面介绍SMTP和SMTPS协议。

2. SMTP协议

SMTP:简单邮件传输协议,是一个基于文本的协议。在其上指定了一个消息的一个或多个接收者(收件人和抄送人),然后消息文本会被传输。可以使用简单的telnet程序来测试一个SMTP服务器。

如今绝大多数邮件服务器都使用该协议。当你给别人发邮件时,你的服务器的某个动态端口(大于1024)就会和邮件服务器的25端口建立一个连接,你发送的邮件会通过这个连接传送到邮件服务器上,保存起来。需要注意的是,现在国内外的大云主机商(例如:阿里云),多数不允许连接外网的25端口。

3. SMTPS协议

SMTPS(SMTP-over-SSL)是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄密,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。端口465和587便是基于SMTPS协议开放的。

      465端口(SMTPS):它是SMTPS协议服务所使用的其中一个端口,它在邮件的传输过程中是加密传输(SSL/TLS)的,相比于SMTP协议攻击者无法获得邮件内容,邮件在一开始就被保护了起来。

      587端口(SMTPS):它是SMTPS协议服务所使用的另一个端口,它在邮件的传输过程中是加密传输(STARTTLS)的,相比于SMTP协议攻击者无法获得邮件内容,邮件在STARTTLS命令执行后才被加密。465用于Outlook上,而587可以用于任何程序上。

Reference

https://www.jianshu.com/p/c1763b172013

邮件传输协议SMTP和SMTPS的更多相关文章

  1. 45.简单邮件传输协议 SMTP

    一丶简单邮件传输协议 简单邮件传输协议 简单邮件传输协议 SMTP smtplib 模块:(在 Python3版本中,可以通过 SMTP协议发送邮件的模块常为 smtplib, 并且这个模块属于内置模 ...

  2. 简单邮件传输协议SMTP

    1.SMTP是由源地址到目的地址传送邮件的一组规则,用来控制信件的中转方式. 2.SMTP服务器是遵循SMTP协议的发送邮件服务器,用来发送或者中转发出的邮件,客户端通过SMTP命令与SMTP服务器进 ...

  3. SMTP 简单邮件传输协议

    SMTP 锁定 本词条由“科普中国”百科科学词条编写与应用工作项目 审核 . SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传 ...

  4. 【RL-TCPnet网络教程】第33章 SMTP简单邮件传输协议基础知识

    第33章      SMTP简单邮件传输协议基础知识 本章节为大家讲解SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)的基础知识,方便后面章节的实战操作. (本 ...

  5. 理解邮件传输协议(SMTP、POP3、IMAP、MIME)

    http://blog.csdn.net/xyang81/article/details/7672745 电子邮件需要在邮件客户端和邮件服务器之间,以及两个邮件服务器之间进行传递,就必须遵循一定的规则 ...

  6. POP3是收邮件的协议,SMTP是发邮件的协议,IMAP是一种邮箱通信协议。

    我也是第一次接触这种服务,是因为我自己在做一个小小的自动推送天气情况到自己邮箱.所以才碰到这个的/ 看一下标题,我们可以先这样理解. POP3(Post Office Protocol - Versi ...

  7. JavaMail学习之一-邮件传输协议

    协议:规定好的格式就是协议.就像http协议有请求协议和响应协议,邮件传输也分为发.收邮件的协议. 邮件协议分3种: 发邮件的:SMTP (Simple Mail Transport  Protoca ...

  8. SMTP邮件传输协议发送邮件和附件

    在以前接触的项目中,一直都是在做网站时用到了发送mail 的功能,在asp 和.net 中都有相关的发送mail 的类, 实现起来非常简单.最近这段时间因工作需要在C++ 中使用发送mail 的功能, ...

  9. SMTP邮件传输协议发送邮件和附件(转)

    1.     SMTP 常用命令简介 1). SMTP 常用命令 HELO/EHLO 向服务器标识用户身份 MAIL 初始化邮件传输 mail from: RCPT 标识单个的邮件接收人:常在MAIL ...

  10. 一次邮件发送协议SMTP问题排查

    项目中需要用到smtp协议来发送邮件告警,后端的技术栈主要是Java和C++,Java项目里直接在网上找的现成的类完美实现,163邮箱,腾讯邮箱和阿里邮箱均测试通过,不幸的是C++的项目也需要使用sm ...

随机推荐

  1. CICFlowMeter 使用方法

    前言 因实验需要提取流量特征,就找到了这个较为著名的流量特征提取工具 CICFlowMeter .例如 CIC-IDS-2017 数据集就是通过这个工具提取而来. 网络上的教程众说纷纭,但我始终是无法 ...

  2. Fermat

    [KPCTF 2024]ez_fermat from Crypto.Util.number import * p = getPrime(1024) q = getPrime(813) n = p * ...

  3. 『Plotly实战指南』--架构与设计理念

    在数据科学和数据分析领域,数据可视化是理解数据和传达信息的关键环节. Python 作为最受欢迎的编程语言之一,拥有众多强大的可视化库,而 Plotly 无疑是其中的佼佼者. 本文将深入介绍 Plot ...

  4. MySQL 中 DATETIME 和 TIMESTAMP 时间类型的区别及使用场景

    MySQL的日期类型简介 在 MySQL 中有两种存储时间的数据类型 DATETIME 和 TIMESTAMP,它们在数据库实际应用中,各有各的优势和劣势. 一. DATETIME 和 TIMESTA ...

  5. Golang 入门 : 字符串及底层字符类型

    字符串 基本使用 在 Go 语言中,字符串是一种基本类型,默认是通过 UTF-8 编码的字符序列,当字符为 ASCII 码时则占用 1 个字节,其它字符根据需要占用 2-4 个字节,比如中文编码通常需 ...

  6. Linux之SELinux的开启、关闭。

    SELinux简介 SELinux 是Security-Enhanced Linux的简写,意指安全增强的linux.它不是用来防火墙设置的.但它对Linux系统的安全很有用.Linux内核(Kern ...

  7. Effective Java理解笔记系列-第2条-何时考虑用构建器?

    为什么写这系列博客? 在阅读<Effective Java>这本书时,我发现有许多地方需要仔细认真地慢慢阅读并且在必要时查阅相关资料才能彻底搞懂,相信有些读者在阅读此书时也有类似感受:同时 ...

  8. 再说cxGrid主从表相关

    查了那么多叽叽歪歪的资料:masterView的key,从表key和detailkey以及从表需要排序. 注意设定参数后,最后active数据集.这里有个顺序问题,否则会增加随机新 回到原点看随机he ...

  9. 为Avalonia应用添加图标

    前言 为了让自己开发的应用更加好看,开发者往往需要增加一些图标. 本文分享在开发Avalonia应用时如何为应用增加图标,希望可以帮助到正在学习使用Avalonia并有此需求的开发者. 实践 经过搜索 ...

  10. markdown常用命令行格式

    Markdown 主要命令(语法)如下: 标题 使用 # 号表示标题,# 的个数决定标题的级别: 一级标题 二级标题 三级标题 四级标题 五级标题 六级标题 段落 & 换行 直接输入文字形成段 ...