Linux上搭建邮件服务

欢迎来到我的博客,代码的世界里,每一行都是一个故事


在这里插入图片描述

🎏:你只管努力,剩下的交给时间

🏠 :小破站

Linux上搭建邮件服务

    • 前言
    • 电子邮件的工作原理和基本组成部分
      • 1. 电子邮件的工作原理
      • 2. 电子邮件的基本组成部分
      • Linux环境下邮件的传输路径和协议
        • 1. 邮件传输协议
        • 2. Linux环境下邮件的传输路径
        • 示例:从发送到接收的邮件路径
    • mailx简介
      • Mailx是什么?
      • Mailx的历史和发展
      • 为什么选择Mailx作为命令行邮件工具?
      • Mailx使用示例
        • 发送简单的邮件
        • 发送带附件的邮件
        • 从文件中读取邮件正文
        • 使用SMTP服务器发送邮件
    • 报错解决
    • 成功页面展示

前言

在当今数字化时代,电子邮件作为信息交流的重要方式,扮演着不可或缺的角色。而Linux作为一个开放源代码和高度可定制的操作系统,为我们提供了丰富的工具和选项来构建个性化的邮件服务。本文将带领读者进入Linux邮件服务的神秘世界,揭示其背后的技术原理和操作技巧,帮助您打造一个安全可靠的邮件传输平台。

电子邮件的工作原理和基本组成部分

1. 电子邮件的工作原理

电子邮件的发送和接收过程可以分为以下几个步骤:

  1. 邮件撰写和发送:

    • 用户在邮件客户端(如Outlook、Thunderbird、Webmail)中撰写邮件并点击发送。
    • 邮件客户端将邮件通过SMTP协议发送到邮件服务器(通常是发件人的邮件服务器)。
  2. 邮件传输:

    • 发件人的邮件服务器通过SMTP协议将邮件传递给收件人的邮件服务器。
    • 在这个过程中,邮件可能会经过多个中间服务器进行转发,直到到达收件人的邮件服务器。
  3. 邮件存储:

    • 收件人的邮件服务器接收到邮件后,将其存储在服务器上的用户邮箱中。
  4. 邮件接收和读取:

    • 收件人通过邮件客户端(或Webmail)使用IMAP或POP3协议从邮件服务器读取邮件。
    • IMAP协议允许邮件保存在服务器上,并在多个设备上同步。
    • POP3协议则通常将邮件下载到本地设备并从服务器上删除。

2. 电子邮件的基本组成部分

  1. 邮件头(Header):

    • From: 发件人的电子邮件地址。
    • To: 收件人的电子邮件地址。
    • Cc: 抄送的电子邮件地址。
    • Bcc: 密送的电子邮件地址。
    • Subject: 邮件主题。
    • Date: 发送日期和时间。
    • Message-ID: 唯一标识邮件的ID。
  2. 邮件正文(Body):

    • 纯文本部分(Plain Text): 邮件的文本内容。
    • HTML部分(可选): 使用HTML格式的邮件内容。
    • 附件(Attachments): 附加到邮件中的文件(如文档、图片等)。

Linux环境下邮件的传输路径和协议

1. 邮件传输协议
  1. SMTP(Simple Mail Transfer Protocol):

    • 用于在邮件客户端和邮件服务器之间、以及邮件服务器之间传输邮件。
    • 默认端口为25(非加密),465(SSL加密),和587(STARTTLS加密)。
    • 负责邮件的发送和转发。
  2. IMAP(Internet Message Access Protocol):

    • 用于邮件客户端从邮件服务器读取邮件,支持在多个设备间同步邮件。
    • 默认端口为143(非加密)和993(SSL加密)。
    • 允许邮件在服务器上保留,并在客户端上进行组织和管理。
  3. POP3(Post Office Protocol version 3):

    • 用于邮件客户端从邮件服务器下载邮件,默认下载后删除服务器上的邮件(但可以配置为保留)。
    • 默认端口为110(非加密)和995(SSL加密)。
    • 适用于不需要在多个设备间同步的场景。
2. Linux环境下邮件的传输路径
  1. 邮件客户端(MUA - Mail User Agent):

    • 用户使用的邮件客户端,例如Thunderbird、Evolution、mutt等。
    • 负责邮件的撰写、发送和接收。
  2. 邮件传输代理(MTA - Mail Transfer Agent):

    • 负责邮件的传输和中继,例如Postfix、Sendmail、Exim等。
    • 接收来自MUA的邮件,通过SMTP协议转发到目标邮件服务器。
  3. 邮件投递代理(MDA - Mail Delivery Agent):

    • 负责将邮件从MTA投递到本地用户的邮箱,例如Procmail、Dovecot等。
    • 将邮件存储在服务器上的用户邮箱中。
  4. 邮件访问代理(MAA - Mail Access Agent):

    • 负责处理IMAP或POP3协议的请求,例如Dovecot、Courier等。
    • 允许用户通过IMAP或POP3协议访问其邮件。
示例:从发送到接收的邮件路径
  1. 发送邮件:

    • 用户在邮件客户端中撰写邮件并点击发送。
    • 邮件客户端使用SMTP协议将邮件发送到本地邮件服务器(MTA,如Postfix)。
    • 本地邮件服务器通过SMTP协议将邮件发送到收件人的邮件服务器。
  2. 接收邮件:

    • 收件人的邮件服务器接收到邮件,并将其存储在用户邮箱中。
    • 收件人使用邮件客户端,通过IMAP或POP3协议从邮件服务器读取邮件。

通过上述过程和协议的协作,电子邮件系统能够高效地发送、转发和接收邮件,确保邮件在互联网上可靠传输。

mailx简介

Mailx是什么?

Mailx 是一个命令行邮件工具,主要用于在 Unix 和类 Unix 系统(如 Linux 和 BSD)上发送和接收电子邮件。它是传统 mail 命令的增强版,提供了更多的功能和更灵活的操作。

Mailx的历史和发展

  1. 起源:

    • mail: 最初的 mail 程序诞生于 1970 年代,用于 Unix 系统,提供了基本的电子邮件功能。最早的 mail 程序由 Ray Tomlinson 开发,是第一个用于发送电子邮件的程序。
  2. BSD mail:

    • mail 的基础上,BSD 系统开发了 BSD mail,增加了一些新功能和改进。
  3. Mailx:

    • MailxBSD mail 的增强版,由 Eric Allman 等人开发。Mailx 扩展了 mail 的功能,增加了对 MIME(多用途互联网邮件扩展)和更复杂邮件管理操作的支持。
    • 后来,POSIX 标准化了 mailx 的功能,使其在各种 Unix 系统上更加统一和一致。
  4. 现代版本:

    • Heirloom mailx:一个现代化的 mailx 实现,支持更多的协议(如 SMTP, IMAP, POP3)和特性(如 SSL/TLS 加密)。
    • s-nail:是 Heirloom mailx 的一个分支,继续增加功能和改进。

为什么选择Mailx作为命令行邮件工具?

  1. 轻量级和高效:

    • Mailx 是一个轻量级工具,适合在资源有限的环境中使用,特别是在服务器上执行自动化任务时。
  2. 脚本友好:

    • Mailx 非常适合在脚本中使用,能够方便地发送邮件通知、警报和报告。
  3. 丰富的功能:

    • 支持发送和接收邮件。
    • 支持 MIME 格式邮件,可以发送带附件的邮件。
    • 支持多种协议(SMTP, IMAP, POP3)。
    • 支持加密(SSL/TLS),确保邮件的安全传输。
  4. 广泛兼容性:

    • Mailx 遵循 POSIX 标准,在各种 Unix 和类 Unix 系统上都可以使用,提供一致的用户体验。
  5. 灵活的配置:

    • 允许用户通过配置文件(如 .mailrc)进行自定义设置,支持别名、邮件签名和自动化操作。
  6. 交互式和非交互式模式:

    • 既可以用于交互式操作,也可以在脚本和自动化任务中以非交互式模式运行。

Mailx使用示例

发送简单的邮件
echo "邮件正文内容" | mailx -s "邮件主题" recipient@example.com
发送带附件的邮件
echo "邮件正文内容" | mailx -s "邮件主题" -a /path/to/attachment recipient@example.com
从文件中读取邮件正文
mailx -s "邮件主题" recipient@example.com < /path/to/email_body.txt
使用SMTP服务器发送邮件

编辑配置文件 .mailrc,添加 SMTP 设置:

set smtp=smtp://smtp.example.com:587
set smtp-auth-user=your-email@example.com
set smtp-auth-password=your-password
set ssl-verify=ignore

然后发送邮件:

echo "邮件正文内容" | mailx -s "邮件主题" recipient@example.com

报错解决

smtp-server: 535 Login Fail. Please enter your authorization code to login

出现这个错误主要是你没有配置,或者配置错误。

1、登录QQ邮箱,进入到如下页面

未命名 10

2、点击上面的生成授权码,将生成的授权码写入到.mailrc配置文件中

smtp-server: 501 Mail from address must be same as authorization user.

这个错误提示表明在使用 QQ 邮箱的 SMTP 服务器发送邮件时,发件人地址(Mail from address)必须与 SMTP 认证的用户(authorization user)地址相同。这是 QQ 邮箱 SMTP 服务器的安全策略之一。

使用-r 你的邮箱指定发件邮箱

成功页面展示

image-20240624162232690

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

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

相关文章

天热了,喜欢游泳的朋友的好去处,气膜游泳馆—轻空间

随着夏季的到来&#xff0c;气温不断攀升&#xff0c;游泳成为许多人消暑解热的首选运动。然而&#xff0c;传统的室外游泳池受天气影响较大&#xff0c;室内游泳馆又常常人满为患。对于那些既想避开烈日&#xff0c;又想享受优质游泳体验的朋友们来说&#xff0c;气膜游泳馆无…

MySQL学习(3):SQL语句之DDL

1.SQL通用语法与分类 &#xff08;1&#xff09;通用语法 &#xff08;2&#xff09;分类 2.DDL 2.1数据库操作 show DATABASES; #查询所有数据库select DATABASE(); #查询当前数据库create DATABASE 数据库名称 [default charest 字符集] [collate 排列规则]; #default cha…

2021年03月Python三级真题+答案(中国电子学会 )

2021年03月Python三级真题 一、选择题 1.下列代码的输出结果是&#xff1f;&#xff08; D &#xff09; x 0x10 print(x) A.2 B.8 C.10 D.16 2.关于语句fopen(d:/a.txt, r)&#xff0c;下列描述不正确的是&#xff1f;&#xff08; C &#xff09; A.f是变量 B.r以…

《PyTorch计算机视觉实战》:一、二章

目录 第一章&#xff1a;人工神经网络基础 比较人工智能和传统机器学习 人工神经网络&#xff08;Artificial Neural Network&#xff0c;ANN&#xff09; 是一种受人类大脑运作方式启发而构建的监督学习算法。神经网络与人类大脑中神经元连接和激活的方式比较类似&#xff0…

从灵感到成品:使用AI生成博客文章的完整指南

在信息爆炸的时代&#xff0c;每个人都有讲述自己故事的权利和需求。博客作为一种表达方式&#xff0c;不仅能记录个人经历&#xff0c;还能分享知识和观点。然而&#xff0c;许多人在写博客文章时&#xff0c;常常会遇到灵感枯竭、时间不够用或者不知道如何开始等问题。幸运的…

‘pip‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件。

&#x1f4da;博客主页&#xff1a;knighthood2001 ✨公众号&#xff1a;认知up吧 &#xff08;目前正在带领大家一起提升认知&#xff0c;感兴趣可以来围观一下&#xff09; &#x1f383;知识星球&#xff1a;【认知up吧|成长|副业】介绍 ❤️如遇文章付费&#xff0c;可先看…

什么是CMSIS || 标准库与HAL库

一&#xff0c;ARM&#xff08;Cortex Microcontroller Software Interface Standard&#xff09; ARM Cortex™ 微控制器软件接口标准&#xff08;Cortex Microcontroller Software Interface Standard&#xff09;是 CortexM 处理器系列的与供应商无关的硬件抽象层。…

Qt 学习(一) addressbook

Qt Demo: addressbook (1)创建项目&#xff1a;选择不创建界面&#xff0c;即UI&#xff0c;此时会自动生成的文件如图所示&#xff1a; QApplication&#xff1a; MainWindow 继承自 QMainWindow&#xff0c;根据需要设计的界面样式。 (2)确定MainWindow 的成员变量 首先&…

如何运用Midjourney探究新中式美学?

新中式美学最近真是越来越火了&#xff0c;把传统中式元素和现代设计结合起来&#xff0c;不仅看着舒服&#xff0c;还特别有文化韵味。 1. 研究和准备 首先&#xff0c;得先弄清楚什么是新中式美学。说白了&#xff0c;就是把传统中式元素和现代设计结合起来。你可以看看相关…

RabbitMQ实践——超时消息的处理方法

大纲 准备工作整个队列的消息都有相同的时效性抛弃超时消息新建带x-message-ttl的队列新建绑定关系实验 超时消息路由到死信队列新建带死信和ttl的队列新建绑定关系实验 消息指定自己的超时时间新建带死信的队列绑定实验 消息自带TTL和队列TTL的关系消息TTL < 队列指定TTL消…

使用 Ubuntu x86_64 平台交叉编译适用于 Linux aarch64(arm64) 平台的 QT5(包含OpenGL/WebEngine支持) 库

使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库 目录 使用 Ubuntu AMD64 平台交叉编译适用于 Linux ARM64 平台的 QT5(包含 OpenGL/WebEngine 支持) 库写在前面前期准备编译全流程1. 环境搭建2. 复制源码包并解压&#xff0c;创…

django 和 pyecharts实现可视化大屏(完整代码)

1.配置settings文件 &#xff08;1&#xff09;注意&#xff1a;需要先创建app(djnago-admin startapp app名称) &#xff08;2&#xff09;配置模板文件 DIRS: [os.path.join(BASE_DIR, templates)], &#xff08;3&#xff09;配置静态文件(这里我由于存放清洗好的需要进行可…

数据结构与算法笔记:高级篇 - 位图:如何实现网页爬虫中的URL去重功能?

概述 网页爬虫是搜索引擎中的非常重要的系统&#xff0c;复杂爬取几十亿、上百亿额度网页。爬虫的工作原理是&#xff0c;通过解析已经爬取网页中的网页链接&#xff0c;然后再爬取这些链接对应地网页。而同一个网页链接有可能被包含在多个页面中&#xff0c;这就会导致爬虫在…

测试开发是什么?为什么现在那么多公司都要招聘测试开发?

测试开发是一种软件开发过程中的一种角色&#xff0c;旨在提高软件质量并确保软件功能完善和稳定。测试开发人员负责编写和执行自动化测试脚本&#xff0c;创建测试工具和框架&#xff0c;以及与开发人员紧密合作&#xff0c;提供实时反馈和改进。 为什么现在那么多公司都要招…

RISC-V异常处理流程概述

RISC-V异常处理流程概述 一、RISC-V异常处理流程和异常委托1.1 异常处理流程1.2 异常委托二、RISC-V异常处理中软件相关内容2.1 异常处理准备工作2.2 异常处理函数2.3 Opensbi系统调用的注册三、参考资料一、RISC-V异常处理流程和异常委托 1.1 异常处理流程 发生异常时,首先…

聚乙烯醇(PVA)涂布型薄膜是高阻隔性包装材料 我国市场增长快速

聚乙烯醇&#xff08;PVA&#xff09;涂布型薄膜是高阻隔性包装材料 我国市场增长快速 聚乙烯醇&#xff08;PVA&#xff09;涂布型薄膜&#xff0c;是以其他塑料薄膜&#xff08;主要是双向拉伸薄膜&#xff09;为基材&#xff0c;以聚乙烯醇为涂料&#xff0c;经表面涂布后制…

如何从0构建一款类jest工具

Jest工作原理 Jest 是一个流行的 JavaScript 测试框架&#xff0c;特别适用于 React 项目&#xff0c;但它也可以用来测试任何 JavaScript 代码。Jest 能够执行用 JavaScript 编写的测试文件的原因在于其设计和内部工作原理。下面是 Jest 的工作原理及其内部机制的详细解释&…

C语言的学习发展路线(都是干货)

哈喽&#xff0c;大家好呀~我又回来了&#xff0c;前期比较忙&#xff0c;没有时间来更文&#xff0c;现在给大家推荐了一个C语言的学习路线&#xff0c;供大家一起学习啦&#xff01; 1. 环境搭建与工具篇 选择编译器&#xff1a;常用的编译器有gcc、Clang、Visual Studio等。…

第一个Java程序--HalloWorld(记事本版)

一、开发步骤 1.编写 将 Java 代码编写到扩展名为 .java 的源文件中 class HelloChina{public static void main(String[] args){System.out.println("HelloWorld!");} } 2.编译 winr进入DOS操作系统&#xff0c;进入当前目录。&#xff08;操作命令见《JAVA概述…

红酒哲学:品味流转时光,探寻生活之深邃奥秘

在繁华的都市中&#xff0c;我们时常被各种声音和色彩所包围&#xff0c;追求着速度与激情。然而&#xff0c;在这喧嚣之中&#xff0c;总有那么一刻&#xff0c;我们渴望静下心来&#xff0c;品味一份不同的宁静与深度。这时&#xff0c;一杯雷盛红酒便成了我们与内心对话的桥…