详解电子邮箱工作原理|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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【安全靶场】信息收集靶场

靶场:https://app.hackinghub.io/hubs/prison-hack 信息收集 子域名收集 1.subfinder files.jabprisons.com staging.jabprisons.com cobrowse.jabprisons.com a1.top.jabprisons.com cf1.jabprisons.com va.cobrowse.jabprisons.com vs.jabprisons.com c…

LVDS接口总结--(5)IDELAY3仿真

仿真参考资料如下: https://zhuanlan.zhihu.com/p/386057087 timescale 1 ns/1 ps module tb_idelay3_ctrl();parameter REF_CLK 2.5 ; // 400MHzparameter DIN_CLK 3.3 ; // 300MHzreg ref_clk ;reg …

DeepSeek的大模型介绍

文章目录 DeepSeek是什么DeepSeek平台使用DeepSeek的使用场景DeepSeek的本地部署 DeepSeek是什么 DeepSeek是一家2023/7月年成立的人工智能公司,致力于开发高效、高性能的生成式AI模型,在短短一年多的时间里推出了多款强大的开源模型,包括De…

【devops】Github Actions Secrets | 如何在Github中设置CI的Secret供CI的yaml使用

一、Github Actions 1、ci.yml name: CIon: [ push ]jobs:build:runs-on: ubuntu-lateststeps:- name: Checkout codeuses: actions/checkoutv3- name: Set up Gouses: actions/setup-gov4with:go-version: 1.23.0- name: Cache Go modulesuses: actions/cachev3with:path: |…

C语言基本概念————讨论sqrt()和pow()函数与整数的关系

本文来源:C语言基本概念——讨论sqrt()和pow()函数与整数的关系. C语言基本概念——sqrt和pow函数与整数的关系 1. 使用sqrt()是否可以得到完全平方数的精确的整数平方根1.1 完全平方数的计算结果是否精确?1.2 为什么不会出现误差(如 1.99999…

日常知识点之面试后反思裸写string类

1:实现一个字符串类。 简单汇总 最简单的方案,使用一个字符串指针,以及实际字符串长度即可。 参考stl的实现,为了提升string的性能,实际上单纯的字符串指针和实际长度是不够了,如上,有优化方案…

【AI论文】10亿参数大语言模型能超越405亿参数大语言模型吗?重新思考测试时计算最优缩放

摘要:测试时缩放(Test-Time Scaling,TTS)是一种通过在推理阶段使用额外计算来提高大语言模型(LLMs)性能的重要方法。然而,目前的研究并未系统地分析策略模型、过程奖励模型(Process …

【漫话机器学习系列】088.常见的输出层激活函数(Common Output Layer Activation Functions)

在神经网络中,输出层(Output Layer) 的激活函数(Activation Function)直接决定了模型的输出形式,并影响损失函数的选择及训练效果。不同的任务类型(如分类或回归)需要使用不同的激活…

在实体机和wsl2中安装docker、使用GPU

正常使用docker和gpu,直接命令行安装dcoker和,nvidia-container-toolkit。区别在于,后者在于安装驱动已经cuda加速时存在系统上的差异。 1、安装gpu驱动 在实体机中,安装cuda加速包,我们直接安装 driver 和 cuda 即可…

麒麟v10 server版安装ollama跑Deepseek

麒麟v10 server版安装ollama跑Deepseek 1. 环境 2. 安装docker yum install docker 发现源只有18.x版本,启动ollama,发现调用CPU,没调用GPU docker19.x以上才 会调用GPU, 可以添加centos8的原,安装docker-ce3.启动ollama&#…

LabVIEW用户界面(UI)和用户体验(UX)设计

作为一名 LabVIEW 开发者,满足功能需求、保障使用便捷与灵活只是基础要求。在如今这个用户体验至上的时代,为 LabVIEW 应用程序设计直观且具有美学感的界面,同样是不容忽视的关键任务。一个优秀的界面设计,不仅能提升用户对程序的…

如何使用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天

手把手教你用Java语言在Idea和Android中分别建立服务端和客户端实现局域网聊天 目录 文章目录 手把手教你用**Java**语言在**Idea**和**Android**中分别建立**服务端**和**客户端**实现局域网聊天**目录**[toc]**基本实现****问题分析****服务端**Idea:结构预览Server类代码解…

【实战篇】DeepSeek + ElevenLabs:让人工智能“开口说话”,打造你的专属语音助手!

最近,AI语音合成技术真是火得不行,各种“开口脆”的AI声音层出不穷,听得我直呼“这也太像真人了吧!” 作为一个科技爱好者,我当然不能错过这股潮流,这不,最近就沉迷于用 DeepSeek 和 ElevenLabs 这两款神器,捣鼓各种人声音频,简直停不下来! 先来科普一下这两位“主角…

vscode/cursor+godot C#中使用socketIO

在 Visual Studio Code(VS Code)中安装 NuGet 包(例如SocketIOClient),你可以通过以下几种方法: 方法 1:使用dotnet cli 打开终端:在 VS Code 中按下Ctrl 或者通过菜单View -> Terminal打开终端。 导…

ETL的使用(sqoop):数据导入,导出

ETL ETL: 是数据抽取(Extract)、数据转换(Transform)和数据加载(Load)的整个过程 常用的ETL工具 sqoop 1.Apache Sqoop 是 Apache 软件基金会旗下的一个开源项目,旨在帮助用户高效地在 Hado…

安卓手游内存call综合工具/内部call/安卓注入call/数据分析(类人猿学院)

进程分析注入综合工具总界面 模块分析函数分析遍历 函数分析 so汇编分析 汇编call植入器,支持模拟器x86 x64 和手机arm64指令全平台 防ce搜索数据功能 全国首套发布,阿凡老师学院最好的安卓内存逆向老师,几乎行业最强的,有兴趣可以…

Transformer 详解:了解 GPT、BERT 和 T5 背后的模型

目录 什么是 Transformer? Transformer如何工作? Transformer 为何有用? 常见问题解答:机器学习中的 Transformer 在技​​术领域,突破通常来自于修复损坏的东西。制造第一架飞机的人研究过鸟类。莱特兄弟观察了秃鹫如何在气流中保持平衡,意识到稳定性比动力更重要。…

在C++的DLL文件中定义的结构体,在DLL外可以使用吗,如何使用?

在C的DLL文件中定义的结构体,在DLL外可以使用,但需要正确处理类型匹配和内存管理。‌ 在DLL外使用DLL中定义的结构体的方法: 一、 ‌使用extern "C"声明‌: 在DLL的导出声明中使用extern "C"可以确保函数和…

PDF另存为图片的一个方法

说明 有时需要把PDF的每一页另存为图片。用Devexpress可以很方便的完成这个功能。 窗体上放置一个PdfViewer。 然后循环每一页 for (int i 1; i < pdfViewer1.PageCount; i) 调用 chg_pdf_to_bmp函数获得图片并保存 chg_pdf_to_bmp中调用了PdfViewer的CreateBitmap函数…

中间件-安装Minio-集成使用(ubantu-docker)

目录 1、安装docer 2、运行以下命令拉取MinIO的Docker镜像 3、检查当前所有Docker下载的镜像 4、创建目录 5、创建Minio容器并运行 6、SDK操作 FileUploader.java 1、安装docer 参考这篇&#xff1a;Linux安装Docker 2、运行以下命令拉取MinIO的Docker镜像 docker pull…