关于邮件协议的理解、实验以及java mail的实现

目录

1、几种电子邮件系统组成

传统电子邮件系统

用户代理 UA (User Agent)

邮箱服务器

基于万维网的电子邮件系统

2、电子邮件协议

SMTP

连接建立

邮件传送

连接释放

局限

POP3

IMAP

补充

3、telnet实验电子邮件协议

SMTP

POP3

4、java mail

参考文章


1、几种电子邮件系统组成

传统电子邮件系统

一个传统电子邮件系统由以下几个部分组成

  • UA(用户代理)
  • 邮箱服务器
  • 电子邮件协议
    • 邮件发送协议(SMTP)与邮件接受协议(POP3,IMAP)

在这里插入图片描述

用户代理 UA (User Agent)

定义:用户代理 UA 就是用户与电子邮件系统的接口,是电子邮件客户端软件。通常是用户计算机中的一个程序

功能:撰写、显示、处理和通信。


邮箱服务器

功能:收发电子邮件

邮件服务器使用客户-服务器方式工作,同时需要使用两种协议:邮件发送协议和邮件接收协议。发送协议用于UA向服务器或者服务器向服务器发送邮件,接收邮件用于UA从服务器读取邮件。

同时邮件服务器必须能够同时充当客户与服务器。当A发送邮件到B,A为客户;当A从B接收邮件,A为服务器。

基于万维网的电子邮件系统

2、电子邮件协议

SMTP

smtp的通信有三个阶段

  • 连接建立
  • 邮件传送
  • 连接释放

连接建立

1.当SMTP客户端每隔一定时间对邮件缓存扫描一次,如发现有邮件,就使用SMTP的熟知端口号25与接收方的邮件服务器的SMTP服务器建立TCP连接。

2.接收方SMTP服务器发出“220 Service ready"告诉客户端它已经准备好接收邮件。

3.客户发送HELO报文,附上发送方的主机名。如果服务器可以接收,则发送“250 OK",否则发送”421 service not available“

SMTP不使用中间的邮件服务器,TCP建立总是在发送方与接收方直接建立。

邮件传送

 1.客户发送MAIL FROM报文介绍报文的发送者。它包括发送人的邮件地址(邮箱名和域名,如house@qq)。这个步骤是必要的:因为可以给服务器在返回差错或报文时的返回邮件地址 。

 2.服务器响应代码250(请求命令完成)或其他适当的代码

 3.客户发送一个或多个RCPT命令,包括收件人的邮件地址,RCPT命令的作用是 : 先弄清接收方系统是否已经准备好接收邮件的准备,然后才发送邮件,这样做视为了避免浪费通信资源,不至于发送了很长的邮件以后才知道是因地址错误 。

4.服务器响应代码250或其他适当的代码。

5.客户发送DATA报文对报文的传送进行初始化,DATA命令表示要开始传送邮件的内容了。

6.服务器响应代码"354 Start mail input: end with <CRLF>.<CRLF>"或其他适当的报文(如421 服务器不可用,500 命令无法识别)。

7.客户用连续的行发送报文的内容。每一行的行结束时输入 <CRLF>.<CRLF> ,即回车换行.回车换行,表示邮件内容结束。

8.服务器响应代码(250 请求命令完成)或其他适当的代码。

        值得注意的是:虽然SMTP使用TCP连接试图使邮件的传送可靠,但它并不能保证不丢失邮件。也就是说,使用SMTP传送邮件只能说可以可靠地传送接收方的邮件服务器,在往后的情况就不知道了。接收方的邮件服务器也许会出故障,使收到的服务器全部丢失(在收件人读取信件之前)。

连接释放

1.客户发送QUIT命令。

 2.服务器响应221(TCP服务关闭)

局限

原生SMTP只能传输ASCII码,最多7B,可不传输2进制文件。明文传输。

POP3

POP3采用C/S的工作方式。在接收邮件的用户PC机中的用户代理UA必须运行POP3的客户程序,而在收件人所连接的ISP的邮件服务器中则运行POP的服务器程序。POP服务器只有在用户输入鉴别信息(用户名+口令)后,才允许对方对邮箱进行读取 。

POP3有 两种工作方式 :删除方式和保存方式。

删除方式就在每一次读取邮件后就把邮箱中的这个邮件删除,用户只能读取一次 

保存方式就是在读取邮件后,邮件仍然在服务器中保存,用户可读取多次,该方式是通过对之前的POP3工作方式(即删除)的缺点进行弥补,对功能进行扩充。

IMAP

        在使用IMAP时,用户的PC机上运行IMAP客户程序,然后与接收方的邮件服务器上的IMAP服务器程序建立TCP连接。 POP3不允许用户在邮件服务器上整理自己的邮件,用户在服务器上不能不同的文件夹,POP3也不允许用户在下载邮件之前读取邮件的部分内容,而IMAP则克服了这些POP3的缺点,说白了就是POP3协议不太愿意让用户直接操作服务器,而IMAP正好客户了这些缺点 。

        IMAP4提供了以下功能( 这些功能POP3则没有 ):

        1.用户在下载邮件之前可以检查邮件的首部。

        2.用户在下载邮件之前可以用特定的字符串搜索电子邮件的内容。

        3.用户可以部分地下载电子邮件。

        4.用户可以在邮件服务器上创建、删除邮箱,或对邮箱重命名。(IMAP是双向的,可以同步本地修改到服务端;POP只能同步服务端到本地)

        5.为了存放电子邮件,用户可以在文件夹中创建分层次的邮箱。

补充

为了改变SMTP只能传输ASCII码的缺点,提出了MIME,MIME没有改变SMTP,而是继续采用现有的邮件编码,但增加了邮件主题的结构,定义了传送非ASCII码的编码规则

3、telnet实验电子邮件协议

SMTP

POP3

4、java mail

添加javax.mail依赖

public class Main{private static String charset = "utf-8";private static final String user = "xxxxx@qq.com";private static final String pass = "xxx";//授权码public static void main(String[] args) throws IOException, MessagingException {Session session = getSession();MimeMessage email = getEmail(session);Transport transport =  session.getTransport();transport.connect(user, pass);transport.sendMessage(email, email.getAllRecipients());transport.close();}private static MimeMessage getEmail(Session session) throws MessagingException, UnsupportedEncodingException {MimeMessage mimeMessage = new MimeMessage(session);mimeMessage.setRecipient(Message.RecipientType.TO, new InternetAddress("xxx@qq.com", "he", charset));mimeMessage.setText("hello world",charset);mimeMessage.setSentDate(new Date());mimeMessage.setContent("hello world", "text/html;charset=utf-8");mimeMessage.setFrom(new InternetAddress("xxx@qq.com", "she", charset));mimeMessage.setSubject("TEST邮件主题", "UTF-8");mimeMessage.saveChanges();return mimeMessage;}private static Session getSession() {Properties props = new Properties();props.setProperty("mail.transport.protocol", "smtp");   // 使用的协议(JavaMail规范要求)props.setProperty("mail.smtp.host", "smtp.qq.com");   // 发件人的邮箱的 SMTP 服务器地址/*      开启了SSL认证的SMTP连接props.setProperty("mail.smtp.auth", "true");            // 需要请求认证
final String smtpPort = "465";props.setProperty("mail.smtp.port", smtpPort);props.setProperty("mail.smtp.socketFactory.class", "javax.net.ssl.SSLSocketFactory");props.setProperty("mail.smtp.socketFactory.fallback", "false");props.setProperty("mail.smtp.socketFactory.port", smtpPort);
*/Session session = Session.getInstance(props);session.setDebug(true);return session;}
}

springboot:

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId>
</dependency>
spring:# 发送QQ邮件配置mail:host: smtp.qq.coprotocol: smtpport: 465username: xxxx@qq.com. #邮箱地址password: xxxx #授权码properties: # 配置以SSL的方式发送, 这个需要使用这种方式并且端口是465mail:smtp:auth: truessl:enable: truesocketFactory:class: com.sun.mail.util.MailSSLSocketFactoryfallback: falsedebug: true

工具类网上随便找一个,或者参考spring官网

参考文章

计算机网络 电子邮件

在telnet登录并使用SMTP和POP收发邮件(QQ邮箱)

基于JavaMail的Java邮件发送:简单邮件发送

spring官网

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/7923.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

el-carousel和el-image组合实现swiper左右滑动图片,点击某张图片放大预览的效果

<template><el-carousel class"image-swiper" :height"100%" :indicator-position"swiperItems.length < 1 ? none : ":arrow"swiperItems.length < 1 ? never : "><el-carousel-item v-for"(a, $i) in s…

websocket前端的连接与接收数据

什么是websocket 1, WebSocket是一种用于在客户端和服务器之间进行全双工通信的网络协议。它使得在单个TCP连接上可以进行双向通信&#xff0c;允许服务器主动地发送数据给客户端&#xff0c;同时客户端也可以向服务器发送数据。与传统的HTTP请求-响应模型不同&#xff0c;Web…

Scrapy框架--settings配置 (详解)

目录 settings配置 官网-参考配置 配置文档 Scrapy默认BASE设置 settings配置 Scrapy框架中的配置文件&#xff08;settings.py&#xff09;是用来管理爬虫行为和功能的关键部分。它是一个Python模块&#xff0c;提供了各种配置选项&#xff0c;可以自定义和控制爬虫的行为。…

【IMX6ULL驱动开发学习】12.Linux驱动之设备树

承接上一篇博客 【IMX6ULL驱动开发学习】11.驱动设计之面向对象_分层思想&#xff08;学习设备树过渡部分&#xff09; 代码获取&#xff1a;https://gitee.com/chenshao777/imx6-ull_-drivers 我后面将三个层合并了&#xff08;实际上只有前两层&#xff09;&#xff0c;合并…

[论文阅读] (31)李沐老师视频学习——4.研究的艺术·理由、论据和担保

《娜璋带你读论文》系列主要是督促自己阅读优秀论文及听取学术讲座&#xff0c;并分享给大家&#xff0c;希望您喜欢。由于作者的英文水平和学术能力不高&#xff0c;需要不断提升&#xff0c;所以还请大家批评指正&#xff0c;非常欢迎大家给我留言评论&#xff0c;学术路上期…

Element-Plus select选择器-下拉组件错位bug(有高度滚动时)

1. bug重现 由于项目不便展示&#xff0c;因此在官网复现bug https://element-plus.org/zh-CN/component/select.html#基础用法 2. 调试 源码调试时发现下拉菜单是直接放在body 元素里&#xff0c;这时候希望它不要直接放在body里&#xff0c; 查阅文档看到这两个属性&#x…

软件工程期末报告(登录注册部分)

云小智微校园工具系统的设计与实现成员1注册模块 目录 云小智微校园工具系统的设计与实现成员1注册模块 第一章 绪论 第二章需求分析&#xff1a; 1.活动图&#xff1a; 2.用例图&#xff1a; 什么用户参与了业务模块&#xff1a; 这类用户在模块中使用什么功能学生用户…

【分布式技术专题】「缓存解决方案」一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战(数据更新场景策略和方案分析)

一文带领你好好认识一下企业级别的缓存技术解决方案的运作原理和开发实战&#xff08;数据更新场景策略和方案分析&#xff09; 数据更新场景Cache Aside Pattern策略思想具体操作分析失效&#xff08;Invalidation&#xff09;命中&#xff08;Cache Hit&#xff09;更新&…

【python】python编程基础

基础工具包 python 原生数据结构元组 Tuple列表 list集合 set字典 dictionary NumPy 数据结构数组 Ndarray矩阵 Matrix Pandas 数据结构序列 Series &#xff08;一维&#xff09;数据框 DataFrame &#xff08;二维&#xff09; Matplotlib 数据可视化绘制饼图绘制折线图绘制直…

git学习使用技巧

目录 关于版本控制 本地版本控制系统 集中化的版本控制系统 分布式版本控制系统 Git 是什么 直接记录快照&#xff0c;而非差异比较 近乎所有操作都是本地执行 Git 保证完整性 Git 一般只添加数据 三种状态 起步 - 初次运行 Git 前的配置 初次运行 Git 前的配置 用户…

软件测试流程扫盲:V/W/H模型,测试左移测试右移

一、软件测试模型 &#xff08;一&#xff09;V模型 V模型是瀑布模型的一种改进V模型标明了测试过程中的不同阶段 1.V模型每个测试阶段的测试内容 单元测试&#xff1a;类、函数 集成测试&#xff1a;接口 系统测试&#xff1a;前期测功能有没有满足需求&#xff0c;后期满…

Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库

介绍 Excelize 是 Go 语言编写的用于操作 Office Excel 文档基础库&#xff0c;基于 ECMA-376&#xff0c;ISO/IEC 29500 国际标准。可以使用它来读取、写入由 Microsoft Excel™ 2007 及以上版本创建的电子表格文档。支持 XLAM / XLSM / XLSX / XLTM / XLTX 等多种文档格式&a…