当前位置: 首页 > news >正文

详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME

写在前面

电子邮件(Email)是一种通过互联网进行异步通信的技术,工作原理涉及多个协议、服务器和客户端协同工作。

接下来我们来介绍一下电子邮箱的工作原理

1. 电子邮件的核心组成部分

  1. 邮件客户端:用户直接交互的软件,比如QQ邮箱、Outlook、Gmail网页端,负责撰写、发送、接收和管理邮件。
  2. 邮件服务器(Mail Server):分为 发送服务器(SMTP服务器)接收服务器(POP3/IMAP服务器)。存储用户邮箱,处理邮件的发送、接收和中转。
  3. DNS(域名系统):通过 MX记录(Mail Exchange Record)查找收件人邮箱的服务器地址。

下面简单介绍几个重要协议:

  • SMTP(Simple Mail Transfer Protocol):用于发送邮件的协议,负责在发送者和接收者之间传输邮件。
  • POP3(Post Office Protocol 3):一种接收邮件的协议,允许客户端从服务器下载邮件。
  • IMAP(Internet Message Access Protocol):另一种接收邮件的协议,允许客户端在服务器上同步邮件并且保持邮件在服务器上不被删除。支持多设备。
  • MIME(Multipurpose Internet Mail Extensions):扩展了SMTP协议,允许电子邮件传输多种内容,如文本、图片、音频和视频等。

2. 邮件发送流程

在这里插入图片描述

1️⃣:用户A 在邮件客户端填写收件人(用户B)邮箱地址(xxx@163.com)以及主题、正文和附件,发送邮件时候会提交到邮箱系统所在的发送服务器。
2️⃣:发件服务器通过DNS查询用户B域名(xxx@163.com)的 MX记录,找到目标邮件服务器地址,并将邮件发送到发件方的SMTP服务器。
3️⃣:收件方SMTP服务器验证收件地址有效性后,将邮件存入对应的邮箱。
4️⃣ / 5️⃣:用户B通过客户端(如手机邮件App)使用 POP3IMAP 协议连接到邮件服务器(163的邮件)。
6️⃣:客户端显示将邮件内容(文本、图片、附件等)呈现给用户。

⚠️ 注意点:

  1. DNS MX记录的作用:
    • MX记录指向接收邮件的服务器地址,优先级由数值决定(数值越小优先级越高)。例如:example.com 的MX记录可能指向 mail.example.com
  2. SMTP通信过程:
    • 通过TCP端口25(或加密端口465/587)建立连接。
  3. 邮件编码与附件处理:
    • 使用 MIME 编码非文本内容(如图片)。
    • 附件通过Base64编码转换为文本格式传输

3. 常见错误问题

在这里插入图片描述

  1. 退信(Bounce)
    • 原因包括:收件地址不存在、服务器拒收(如黑名单)、附件过大等。这种情况下,错误信息通过SMTP返回给发件人。
  2. 邮件延迟
    • 可能因服务器队列拥堵、DNS查询失败或网络问题导致。

4. 邮件的安全性

邮件在传输过程中可能涉及多种安全机制,主要包括:

  • SSL/TLS加密:用于加密SMTP、POP3和IMAP等协议的连接,确保邮件在传输过程中不被窃取或篡改。

在这里插入图片描述

  • SPF(Sender Policy Framework) :用于验证发件人域名是否授权了该IP发送邮件

在这里插入图片描述

  • DKIM(DomainKeys Identified Mail):通过数字签名验证邮件的完整性。

在这里插入图片描述

  • DMARC(Domain-based Message Authentication, Reporting & Conformance):基于SPF和DKIM的策略框架,增强邮件验证能力。

在这里插入图片描述

5. 垃圾邮件过滤

垃圾邮件(Spam)是每个邮件系统都必须处理的问题。现代邮件服务通过多种方式进行垃圾邮件过滤,包括:

  • 黑名单:邮件服务器会把已知的垃圾邮件源列入黑名单,来自这些源的邮件将被拒绝。
  • 内容分析:邮件内容分析可以检测其中是否包含常见的垃圾邮件特征。
  • 机器学习:一些邮件服务使用机器学习算法来检测垃圾邮件,逐步提高准确率。

参考

[1] https://faq.cyberimpact.com/en/articles/1415/what-is-spf-dkim-and-dmarc-authentication
[2] https://chat.deepseek.com

相关文章:

详解电子邮箱工作原理|SMTP、POP3、IMAP、SPF、MIME

写在前面 电子邮件(Email)是一种通过互联网进行异步通信的技术,工作原理涉及多个协议、服务器和客户端协同工作。 接下来我们来介绍一下电子邮箱的工作原理 1. 电子邮件的核心组成部分 邮件客户端:用户直接交互的软件&#xf…...

QT笔记——QPlainTextEdit

文章目录 1、概要2、文本设计2.1、设置文本2.1、字体样式(大小、下划线、加粗、斜体) 1、概要 QPlainTextEdit 是 Qt 框架中用于处理纯文本编辑的控件,具有轻量级和高效的特点,以下是它常见的应用场景: 文本编辑器&am…...

Qt使用pri和pro文件进行模块化编程

假如我想要做一个功能,这个功能用代码模块化实现出来,方便将来移植,比如音视频播放器的界面,将来想要在其他工程使用时,只需要将widget提升为音视频播放界面即可。 当我们其他工程需要这个功能时,我们在调用…...

Linux-文件基本操作

1.基本概念 文件: 一组相关数据的集合 文件名: 01.sh //文件名 2.linux下的文件类型 b block 块设备文件 eg: 硬盘 c character 字符设备文件 eg: 鼠标,键盘 d directory 目录文件 eg: 文件夹 - regular 常规文件…...

自己部署 DeepSeek 助力 Vue 开发:打造丝滑的时间线(Timeline )

前言:哈喽,大家好,今天给大家分享一篇文章!并提供具体代码帮助大家深入理解,彻底掌握!创作不易,如果能帮助到大家或者给大家一些灵感和启发,欢迎收藏关注哦 💕 目录 自己…...

初窥强大,AI识别技术实现图像转文字(OCR技术)

⭐️⭐️⭐️⭐️⭐️欢迎来到我的博客⭐️⭐️⭐️⭐️⭐️ 🐴作者:秋无之地 🐴简介:CSDN爬虫、后端、大数据、人工智能领域创作者。目前从事python全栈、爬虫和人工智能等相关工作,主要擅长领域有:python…...

【Apache Paimon】-- 作为一名小白,如何系统地学习 Apache paimon?

目录 一、整体规划 1. 了解基本概念与背景 2. 学习资料的选择 3. 学习路径与规划 4. 学习建议 5. 注意事项 6. 参考学习资料 二、详细计划 阶段 1:了解基础(1-2 周) 阶段 2:深入掌握核心功能(3-4 周&#xf…...

Elasticvue使用总结

用了好多es的可视化客户端,但平时用的最多的是Elasticvue这个浏览器插件。总结一下使用教程。 连接 首页大盘 说明: 节点情况:一共三个节点,三个节点既是master节点又是data节点。(一个节点可以既是master又是data&a…...

尚硅谷爬虫note002

一、for循环 语法: for 变量 in 要遍历的数据 方法体 【for i in 要遍历的数据】:字符串中 i 表示变量 1. 循环字符串 2. range(5)方法 :0~4 for i in range(5) 3. range(1&…...

小白零基础如何搭建CNN

1.面向对象编程 1.1类(Class)和对象(Object) class Animal:"""定义一个动物类Animal,包含基本属性和行为。"""def __init__(self, name, species, age0):"""__init__…...

在vivado中对数据进行延时,时序对齐问题上的理清

在verilog的ISP处理流程中,在完成第一个模块的过程中,我经常感到困惑,到底是延时了多少个时钟?今日对这几个进行分类理解。 目录 1.输入信号激励源描述 1.1将数据延时[9]个clk 1.2将vtdc与hzdc延时[9]个clk(等价于单bit的数据…...

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决?

《只狼》运行时提示“mfc140u.dll文件缺失”是什么原因?要怎么解决? 宝子们,是不是在玩《只狼》的时候,突然弹出一个提示:“找不到mfc140u.dll文件”?这可真是让人着急上火!别慌,今…...

vue学习笔记7

打包发布 目标:明确打包的作用 说明:vue脚手架只是开发过程中,协助开发的工具,当真正开发完了 > 脚手架不参与上线 打包的作用: 将多个文件压缩合并成一个文件,语法降级,less sass ts 语法…...

Unity 增量打包AssetBundle

背景 打包太慢了,想要没改动的资源不重新打包浪费时间。 来源 官方文章:https://forum.unity.com/threads/about-incremental-build-and-asset-bundle-hashes.1436032/ 官网AB介绍:https://learn.unity.com/tutorial/assets-resources-and…...

嵌入式八股文面试题(二)C语言算法

相关概念请查看文章&#xff1a;C语言概念。 1. 如何实现一个简单的内存池&#xff1f; 简单实现&#xff1a; #include <stdio.h> #include <stdlib.h>//内存块 typedef struct MemoryBlock {void *data; // 内存块起始地址struct MemoryBlock *next; // 下一个内…...

尚硅谷爬虫note005

一、编解码 1.get请求的quote方法 将汉字转为Unicode字符 # _*_ coding : utf-8 _*_ # Time : 2025/2/12 16:33 # Author : 20250206-里奥 # File : demo19_get请求的quote方法 # Project : PythonProject10-14# 景甜page # https://www.baidu.com/s?ieutf-8&f8&rsv…...

xml 和json互转工具

工具1 有个问题会导致springboot返回捕获的异常编程xml格式 import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.dataformat.xml.XmlMapper; import org.json.JSONObject; import org.json.XML; import org.w3c.dom.Document;import javax.xm…...

ElementUI 抽屉组件高度封装

在前端开发中&#xff0c;ElementUI 的el-drawer组件虽实用&#xff0c;但为满足复杂业务需求&#xff0c;如统一样式、特定交互和灵活使用&#xff0c;常需二次封装。下面将带你实现一个高度封装的 ElementUI 抽屉组件。 创建基础封装组件 创建MyDrawer.vue&#xff0c;引入e…...

深入解析:如何在C#和C/C++之间安全高效地通过P/Invoke传递多维数组

在工业控制、机器人编程和物联网等领域&#xff0c;我们经常需要让C#这样的托管语言与C/C编写的底层库进行交互。在这个过程中&#xff0c;遇到需要传递多维数组的场景时&#xff0c;许多开发者会意外遭遇System.Runtime.InteropServices.MarshalDirectiveException异常。本文将…...

轻量级在线ETL数据集成工具架构设计与技术实现深度剖析

在当今数字化时代,企业面临着海量异构数据的整合挑战。ETL(Extract, Transform, Load)工具作为数据集成的核心,负责将分散在不同数据源中的数据进行抽取、转换和加载,以构建统一的数据视图。本文将深入剖析一款基于诺依框架开发的在线ETL数据集成工具,重点阐述其架构设计…...

生成xcframework

打包 XCFramework 的方法 XCFramework 是苹果推出的一种多平台二进制分发格式&#xff0c;可以包含多个架构和平台的代码。打包 XCFramework 通常用于分发库或框架。 使用 Xcode 命令行工具打包 通过 xcodebuild 命令可以打包 XCFramework。确保项目已经配置好需要支持的平台…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

【Oracle APEX开发小技巧12】

有如下需求&#xff1a; 有一个问题反馈页面&#xff0c;要实现在apex页面展示能直观看到反馈时间超过7天未处理的数据&#xff0c;方便管理员及时处理反馈。 我的方法&#xff1a;直接将逻辑写在SQL中&#xff0c;这样可以直接在页面展示 完整代码&#xff1a; SELECTSF.FE…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

为什么需要建设工程项目管理?工程项目管理有哪些亮点功能?

在建筑行业&#xff0c;项目管理的重要性不言而喻。随着工程规模的扩大、技术复杂度的提升&#xff0c;传统的管理模式已经难以满足现代工程的需求。过去&#xff0c;许多企业依赖手工记录、口头沟通和分散的信息管理&#xff0c;导致效率低下、成本失控、风险频发。例如&#…...

【CSS position 属性】static、relative、fixed、absolute 、sticky详细介绍,多层嵌套定位示例

文章目录 ★ position 的五种类型及基本用法 ★ 一、position 属性概述 二、position 的五种类型详解(初学者版) 1. static(默认值) 2. relative(相对定位) 3. absolute(绝对定位) 4. fixed(固定定位) 5. sticky(粘性定位) 三、定位元素的层级关系(z-i…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

Spring AI 入门:Java 开发者的生成式 AI 实践之路

一、Spring AI 简介 在人工智能技术快速迭代的今天&#xff0c;Spring AI 作为 Spring 生态系统的新生力量&#xff0c;正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务&#xff08;如 OpenAI、Anthropic&#xff09;的无缝对接&…...

多种风格导航菜单 HTML 实现(附源码)

下面我将为您展示 6 种不同风格的导航菜单实现&#xff0c;每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Device Mapper 机制

Device Mapper 机制详解 Device Mapper&#xff08;简称 DM&#xff09;是 Linux 内核中的一套通用块设备映射框架&#xff0c;为 LVM、加密磁盘、RAID 等提供底层支持。本文将详细介绍 Device Mapper 的原理、实现、内核配置、常用工具、操作测试流程&#xff0c;并配以详细的…...