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

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

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

相关文章

【软件测试】概念篇

&#x1f383;&#x1f383;&#x1f383;个人主页&#x1f383;&#x1f383;&#x1f383; &#x1f383;&#x1f383;&#x1f383;【软件测试专栏】&#x1f383;&#x1f383;&#x1f383; &#x1f383;&#x1f383;&#x1f383;上一篇文章&#xff1a;认识测试&…

性能测试中关注的指标

性能测试中我们会关注很多的性能指标,会通过观测的性能指标来决定性能测试是否继续执行、性能测试是否通过等等内容,但是每次说到要监控什么指标的时候,往往就纠结在服务器的CPU利用率、可用内存数、磁盘IO、网络吞吐等,这些都是ISO25010定义的资源特性中给出的例子,其实对…

音乐创作与制作软件:Studio One 6.6.1中文版安装激活使用指南

音乐创作与制作软件&#xff1a;Studio One 6.6.1 简介 StudioOne 的设计核心是易于使用。十年来&#xff0c;它已将久经考验的录音棚模型与当今以节拍和循环为导向的制作过程无缝地结合在一起&#xff0c;因此您可以比以往更快地将音乐创意带入声音现实。高效的单屏幕界面可…

嵌入式Linux:开发平台搭建

目录 简介 1. JTAG工具的使用 2. 使用串口工具 3. 安装交叉编译工具 4.NFS文件的使用 简介 嵌入式开发平台的搭建,也即安装交叉编译工具链。 交叉编译是在一种平台上编译出能运行于另一种平台上的程序。 例如在X86平台上编译出能运行于ARM平台上的程序。 由于嵌入式设备…

04-Mysql 索引,事务

MySQL 索引介绍 索引是一个排序的列表&#xff0c;在这个列表中存储着索引的值和包含这个值的数据所在行的物理地址。在数据十分庞大的时候&#xff0c;索引可以大大加快查询的速度。这是因为使用索引后可以不用扫描全表来定位某行的数据&#xff0c;而是先通过索引表找到该行…

PointCloudLib-特征(Features)-基于转动惯量和偏心率的描述符

基于转动惯量和偏心率的描述符 在本教程中,我们将学习如何使用 pcl::MomentOfInertiaEstimation 类来获取基于 偏心率和转动惯量。此类还允许提取云的轴对齐和定向边界框。 但请记住,提取的 OBB 不是最小可能的边界框. 理论入门 特征提取方法的思路如下。 首先计算点云的…

鸿蒙开发:1.环境搭建和入门

环境搭建 安装HUAWEI DevEco Studio 简介 HUAWEI DevEco Studio是基于IntelliJ IDEA Community开源版本打造&#xff0c; 为运行在HarmonyOS和OpenHarmony系统上的应用和服务提供一站式的开发平台。 特点 1.高效智能代码编辑&#xff1a;支持ArkTS、JS、C/C等语言的代码高亮、…

GNU、Unix、Linux、Makefile、GCC、GDB 之间的关系

1.1 Makefile Makefile 是一个用于自动化编译和构建过程的文本文件&#xff0c;尤其在软件开发项目中被广泛使用。它定义了一系列规则&#xff0c;说明了如何将源代码文件编译成可执行文件、库或者其他目标文件。Makefile 的核心作用在于它能够管理源代码文件之间的依赖关系&am…

Python多线程技巧心得详解

概要 多线程是一种能够并发执行代码的方法,可以提高程序的执行效率和响应速度。本文将详细介绍 Python 中多线程的概念、使用场景、基本用法以及实际应用,可以更好地掌握多线程编程。 什么是多线程? 多线程是一种在单个进程内并发执行多个线程的技术。每个线程共享相同的内…

笔记101:OSQP求解器的底层算法 -- ADMM算法

前言1&#xff1a;这篇博客仅限于介绍拉格朗日乘子法&#xff0c;KKT条件&#xff0c;ALM算法&#xff0c;ADMM算法等最优化方法的使用以及简版代码实现&#xff0c;但不会涉及具体的数学推导&#xff1b;不过在下面我会给出具体数学推导的相关文章和截图&#xff0c;供学有余力…

图书馆书籍管理系统

项目名称与项目简介 图书馆书籍管理系统 本项目是一个计算机管理系统&#xff0c;也就是将传统手工的管理方式转变为智能化、标准化、规范化的管理管理模式&#xff0c;对图书馆中所有的图书、文献资料、音像资料、报刊、期刊等各种类型的资料实现采编、收集图书信息、检索、归…

探讨数字化背景下VSM(价值流程图)的挑战和机遇

在信息化、数字化飞速发展的今天&#xff0c;各行各业都面临着前所未有的挑战与机遇。作为源自丰田生产模式的VSM&#xff08;价值流程图&#xff09;&#xff0c;这一曾经引领制造业革命的工具&#xff0c;在数字化背景下又将如何乘风破浪&#xff0c;应对新的市场格局和技术变…

Java中的方法重载

方法重载&#xff08;Method Overloading&#xff09;是Java中面向对象编程的重要特性之一。它允许一个类中有多个方法名称相同但参数列表不同的方法&#xff0c;从而实现不同的功能。本文将深入探讨方法重载的概念、规则及其应用场景&#xff0c;并通过示例代码展示其实际用法…

屏幕翻译下载哪个软件好?好用的屏幕翻译推荐

想象一下&#xff0c;当我们在阅读外文文档或是观看外语电影时&#xff0c;如果能有一款翻译工具同步提供译文&#xff0c;那将是多么令人愉悦的体验&#xff01; 如果这种翻译服务能够在不影响其他应用的情况下进行&#xff0c;那就是double快乐了。 其实&#xff0c;现在要…

JAVA之Guava

Guava 是由 Google 开发的一个开源 Java 库&#xff0c;包含了大量被认为是 Java 编程中常用的实用工具类和方法。Guava 提供了丰富的集合处理、缓存、字符串处理、并发工具和 I/O 操作等功能。 1. 集合工具 Guava 提供了强大的集合框架扩展&#xff0c;简化了集合的创建、操…

【LeetCode】每日一题:二叉树的层次遍历

给你二叉树的根节点 root &#xff0c;返回其节点值的 层序遍历 。 &#xff08;即逐层地&#xff0c;从左到右访问所有节点&#xff09;。 解题思路 水题 AC代码 # Definition for a binary tree node. # class TreeNode: # def __init__(self, val0, leftNone, rightN…

【ajax07基础】回调函数地狱

一&#xff1a;什么是回调函数地狱 在一个回调函数中嵌套另一个回调函数&#xff08;甚至一直嵌套下去&#xff09;&#xff0c;形成回调函数地狱 回调函数地狱存在问题&#xff1a; 可读性差异常捕获严重耦合性严重 // 1. 获取默认第一个省份的名字axios({url: http://hmaj…

Postman使用简要步骤

目录 下载与安装 Postman 启动 Postman 创建请求 设置请求信息 发送请求 编写测试脚本 使用环境变量和全局变量 使用 Pre-request Script 生成 API 文档 模拟和测试 API 持续集成与自动化测试 下载与安装 Postman 访问 Postman 官网&#xff08;https://www.postman…

在 C 语言中使用 UT_hash_handle 简化实现哈希表

在 C 语言中使用 UT_hash_handle 简化实现哈希表的步骤如下&#xff1a; 1、包含头文件&#xff1a;首先需要包含 uthash 库的头文件 uthash.h。 #include "uthash.h"2、定义包含哈希表支持的结构体&#xff1a;在定义结构体时&#xff0c;需要在结构体中添加 UT_h…

浏览器自动填充登录用户名和密码,如何清除

文章目录 刷新网页的时候浏览器会自动填充用户名和密码刷新之后效果图解决方案完整的login.vue代码核心代码原理(添加 readonly 和监听 focus 事件) 刷新网页的时候浏览器会自动填充用户名和密码 刷新之后效果图 解决方案 完整的login.vue代码 <template><div class…