1Panel 自建邮局 - Docker Mailserver

本文首发于 Anyeの小站,点击链接 访问体验更佳

前言

首先发一段劝退说辞:我相信点进本文的人自建邮局的目的更多地是为了能用自己的域名邮箱,收发邮件?

  • 仅收不发,推荐使用 https://www.cloudflare.com/zh-cn/developer-platform/products/email-routing/

  • 收发邮件,建议使用托管邮局,https://www.ali-exmail.cn/free/https://exmail.qq.com/qy_mng_logic/registerhttps://ym.163.com/https://www.feishu.cn/product/email等等,均有一定免费的邮箱额度,送达率高且有详细文档,足够个人使用。

自建邮局有以下缺陷:

  1. 配置复杂,技术门槛高。

  2. 维护成本高,需要定期更新和维护服务器。

  3. 邮件送达率不稳定,配置不当容易进入垃圾邮件箱。

好吧,如果你出于学习目的,仍然想要尝试自建邮局,那么就开始吧!

致谢

  • 新一代 Linux 服务器运维管理面板 1Panel 专业版按年订阅八折优惠:https://www.lxware.cn/1panel?code=Anyexyz

  • 本测试服务器由 https://ono.ee 提供。

准备工作

  • 已部署 1Panel 的服务器一台。https://1panel.cn/docs/installation/online_installation/

  • 域名一个,本文示例域名:anye.email

  • 基本语文素养

部署

通过 1Panel 申请 TLS 证书

本步非必须,若您已拥有有效的 TLS 证书,可跳过此步骤。

参照此教程https://1panel.cn/docs/user_manual/websites/certificate_create/获取 TLS 证书,如此处我将搭建的邮局所使用的域名为 anye.email ,则申请该域名证书,同时需要注意,勾选 推送证书到本地目录按钮 ,填写一个易于使用的路径,如此处 /ssl/anye.email

安装 Mailserver

应用商店 中找到 邮件服务 分类,找到 Mailserver 点击 安装

填写域名,端口等信息,勾选端口外部访问

注意:默认不需要修改端口信息,奈何部分云厂商被恶意用户滥用端口,导致部分端口被封禁,所以建议在安装前确认端口可用性,若不可用,请更换其他端口。

勾选 编辑 compose 文件 ,在 volumes 中添加最开始申请 TLS 证书的路径映射,点击 确认 开始安装。

services:mailserver:image: ghcr.io/docker-mailserver/docker-mailserver:14.0.0container_name: ${CONTAINER_NAME}hostname: ${MS_HOSTNAME}env_file: ./conf/mailserver.envports:- "${PANEL_APP_PORT_SMTP}:25"- "${PANEL_APP_PORT_IMAP4_143}:143"- "${PANEL_APP_PORT_ESMTP_465}:465"- "${PANEL_APP_PORT_ESMTP_587}:587"- "${PANEL_APP_PORT_IMAP4_993}:993"volumes:- ./data/dms/mail-data/:/var/mail/- ./data/dms/mail-state/:/var/mail-state/- ./data/dms/mail-logs/:/var/log/mail/- ./data/dms/config/:/tmp/docker-mailserver/- /etc/localtime:/etc/localtime:ro- /ssl/anye.email/:/ssl/anye.email/:ro # 这里这里,示例内容restart: alwaysnetworks:  - 1panel-networkstop_grace_period: 1mlabels:createdBy: "Apps"healthcheck:test: "ss --listening --tcp | grep -P 'LISTEN.+:smtp' || exit 1"timeout: 3sretries: 0
networks:  1panel-network:  external: true

配置 TLS

进入 Mailserver 安装目录,进入 conf 目录,找到 mailserver.env

搜索找到 SSL_TYPE ,设定为 manual ,同时修改 SSL_CERT_PATHSSL_KEY_PATH 为映射的 TLS 证书路径:

SSL_TYPE=manual# These are only supported with `SSL_TYPE=manual`.
# Provide the path to your cert and key files that you've mounted access to within the container.
# 路径仅供参考
SSL_CERT_PATH=/ssl/anye.email/fullchain.pem
SSL_KEY_PATH=/ssl/anye.email/privkey.pem

创建首个账户

点击侧边栏 容器,找到 Mailserver 容器进入 终端

输入命令创建账户

// 创建邮箱账户: setup email add <NEW ADDRESS>// 示例:
setup email add admin@anye.email

生成 DKIM

继续输入命令生成 DKIM

setup config dkim

生成的 DKIM 在容器内 /tmp/docker-mailserver/opendkim/keys/ 目录下,即主机 /opt/1panel/apps/mailserver/mailserver/data/dms/config/opendkim/keys/ ,找到其中的 mail.txt ,下载,导入到 DNS 解析中,示例:

DNS 解析

DKIM 记录

域名密钥识别邮件 (DKIM) 是一种身份验证协议,通过对电子邮件中的某些字段进行加密签名来验证邮件的真实性。它允许接收方验证发送方是否有权使用该域名,并确保邮件未被篡改。

mail._domainkey	IN	TXT	( "v=DKIM1; h=sha256; k=rsa; ""p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzJawbBm2L76jTMES9GQyNdmxF/caall4YmalGUkmc00duE47ri0awAVieTgHPQ7GVBSZOO8FNY8TC6XntJij915B2O7dVqTKsZDLl27RN3YFNpu+2Y+XKb6yvpA0ZjlySt+LwIjfKRfz6EY/icuakuOt7s6b1KUodVkgX6ZWn8CyHcy7Msca//BeIsGhxxrYVTcSalOiOYN54i""wPiRt/RbjIbbEmB4Enzqk+i2KeBJoNhwDdqhbLMyZXE0W0lX8Ztt5kQO8hJrc1eeH528V59Lp7YOprF5LMFhzoyTdxcg0sDWVItvWcxtIq0Sh6uAq8hubK6QS4x/LIMdWJvNZBWwIDAQAB" )  ; ----- DKIM key mail for anye.email

手动添加 DNS 记录时注意:

字段

记录类型

TXT

主机记录

mail._domainkey

记录值

合并上述 txt 文件内的记录值,把文件中的内容去掉双引号和换行,将其合并成一行。例如,示例记录内容会变成:

v=DKIM1; h=sha256; k=rsa; p=MIIBIjANBgkqhkiG9w0BA...写不下了不写了反正就是那些内容...8hubK6QS4x/LIMdWJvNZBWwIDAQAB

  • default._domainkey
    DKIM选择器,标识此记录对应的密钥。通常管理员可自定义选择器名称。

  • v=DKIM1
    DKIM协议的版本号,目前唯一有效值为 DKIM1

  • k=rsa
    指定密钥的加密算法,目前主要使用 RSA 。

  • p=MIGfMA0...
    公钥内容,用于验证邮件的 DKIM 签名。

SPF 记录

发送方策略框架 (SPF) 记录是一种 DNS TXT 记录,其中列出所有获得授权从特定域发送电子邮件的服务器。DNS TXT(“文本”)记录允许域管理员将任意文本输入到域名系统(DNS) 中。TXT 记录最初是为包含有关域的重要信息而创建的,但后来已经发展为服务其他目的。

# 示例
v=spf1 mx ~all
  • v=spf1表示这是 SPF记录的版本号,目前只有一个版本

  • mx 表示授权由域名对应的MX记录中列出的IP地址发送邮件

  • SoftFail和HardFail是两种策略,用于指定未经授权的发件人邮件如何处理

    • ~all 宽容策略。如果发件人的IP地址不在SPF记录中指定的允许列表中,那么收件方的邮件服务器不会拒绝该邮件,而是将该邮件标记为“软失败”,并将其放入接收方的垃圾邮件文件夹或者标记为垃圾邮件。

    • -all 严格策略。如果发件人的IP地址不在SPF记录中指定的允许列表中,那么收件方的邮件服务器会拒绝该邮件,并将其退回给发件人或者直接删除

DMARC 记录

基于域的消息身份验证、报告和一致性 (DMARC) 是一种验证电子邮件的方法。DMARC 政策在检查一个域的发送方策略框架 (SPF) 和 域名密钥识别邮件 (DKIM) 记录(这些都是额外的电子邮件身份验证方法)后,告诉接收电子邮件的服务器该怎么做。

# 示例
v=DMARC1; p=none; sp=none;
  • v=DMARC1
    表示这是DMARC记录的版本号,目前唯一的有效值是DMARC1

  • p=none
    该字段定义了当接收服务器检测到邮件未通过身份验证时应采取的策略:

    • none:无操作。接收服务器不会拒绝或隔离未通过验证的邮件,只记录该行为以供报告。

    • quarantine:将未通过验证的邮件标记为垃圾邮件并隔离。

    • reject:拒绝未通过验证的邮件。

  • sp=none
    针对子域的策略,和p字段功能类似。如果省略该字段,子域将遵循p字段指定的策略。

  • rua=mailto:example@domain.com
    定义接收DMARC聚合报告的电子邮件地址。报告包含有关验证结果的统计信息,帮助域管理员了解哪些邮件未通过验证。

  • ruf=mailto:example@domain.com
    定义接收DMARC失败报告的电子邮件地址。失败报告通常包含有关验证失败的详细信息,用于深入分析问题。

  • pct=100
    指定该DMARC策略应用于多少百分比的邮件。默认值是100,表示策略适用于所有邮件。如果设置为50,则只有50%的邮件会被应用DMARC策略。

  • aspf=r
    定义SPF对齐的严格程度:

    • r:宽松对齐,允许子域发送的邮件。

    • s:严格对齐,发送的邮件必须完全匹配SPF记录中的域。

  • adkim=r
    定义DKIM对齐的严格程度:

    • r:宽松对齐,允许子域签名。

    • s:严格对齐,邮件的DKIM签名必须完全匹配域名。

A 记录
  • 名称(主机名)mail

  • 类型A

  • 154.26.209.188(示例)

这个A记录将域名 mail.anye.email 解析到IPv4地址154.26.209.188(示例)。当用户访问 mail.anye.email 时,DNS 会指向这个IP地址。

MX记录
  • 名称(主机名)@(代表根域名anye.email

  • 类型MX

  • mail.anye.email

这个MX记录表示域名 anye.email 的邮件服务器是mail.anye.email,并将邮件服务交由该域名处理。

为了保证正常解析,mail.anye.email 需要一个对应的A记录(正好在配置中有对应的A记录:mail -> 154.26.209.188)。

参考

测试

在邮箱客户端中输入服务器信息进行连接

发送测试邮件

参考文章

[1] https://www.cloudflare.com/zh-cn/developer-platform/products/email-routing/

[2] https://www.cloudflare.com/zh-cn/learning/dns/dns-records/dns-dkim-record/

[3] https://www.cloudflare.com/zh-cn/learning/dns/dns-records/dns-spf-record/

[4] https://www.cloudflare.com/zh-cn/learning/dns/dns-records/dns-dmarc-record/

[5] https://www.mail-tester.com/faq?lang=zh

[6] https://docker-mailserver.github.io/docker-mailserver/v14.0/config/environment/

[6] http://www.open-spf.org/SPF_Record_Syntax/

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

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

相关文章

【Maven】功能和核心概念

1. 什么是Maven 1.1 Maven的概念 Maven 是 Apache 软件基金会组织维护的一款自动化构建工具&#xff0c;专注服务于 Java 平台的项目构建和依赖管理。 1.2 为什么要使用Maven&#xff1f; 在项目开发中&#xff0c;我们需要引用各种 jar 包&#xff0c;引用的 jar 包可能有…

企业网站面临的爬虫攻击及安全防护策略

在当今数字化时代&#xff0c;企业网站不仅是展示企业形象的窗口&#xff0c;更是进行商业活动的重要平台。然而&#xff0c;企业网站在日常运营中面临着多种类型的爬虫攻击&#xff0c;这些攻击不仅会对网站的正常访问造成影响&#xff0c;还可能窃取敏感数据&#xff0c;给企…

vue3 + vite + antdv 项目中自定义图标

前言&#xff1a; 去iconfont-阿里巴巴矢量图标库 下载自己需要的icon图标&#xff0c;下载格式为svg&#xff1b;项目中在存放静态资源的文件夹下 assets 创建一个存放svg格式的图片的文件夹。 步骤&#xff1a; 1、安装vite-plugin-svg-icons npm i vite-plugin-svg-icons …

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本

安装SQL Server 2022提示需要Microsoft .NET Framework 4.7.2 或更高版本。 原因是&#xff1a;当前操作系统版本为Windows Server 2016 Standard版本&#xff0c;其自带的Microsoft .NET Framework 版本为4.6太低&#xff0c;不满足要求。 根据报错的提示&#xff0c;点击链接…

基于yolov8、yolov5的铝材缺陷检测识别系统(含UI界面、训练好的模型、Python代码、数据集)

摘要&#xff1a;铝材缺陷检测在现代工业生产和质量管理中具有重要意义&#xff0c;不仅能帮助企业实时监控铝材质量&#xff0c;还为智能化生产系统提供了可靠的数据支撑。本文介绍了一款基于YOLOv8、YOLOv5等深度学习框架的铝材缺陷检测模型&#xff0c;该模型使用了大量包含…

Goland或Idea启动报错

Goland或Idea启动不了 报错如图&#xff1a; 原因&#xff1a;破解导致 解决方案 环境变量中有关Goland的全部删除

ceph手动部署

ceph手动部署 一、 节点规划 主机名IP地址角色ceph01.example.com172.18.0.10/24mon、mgr、osd、mds、rgwceph02.example.com172.18.0.20/24mon、mgr、osd、mds、rgwceph03.example.com172.18.0.30/24mon、mgr、osd、mds、rgw 操作系统版本&#xff1a; Rocky Linux release …

PMP–一、二、三模、冲刺–分类–8.质量管理

文章目录 技巧五、质量管理 一模8.质量管理--质量管理计划--质量管理计划包括项目采用的质量标准&#xff0c;到底有没有满足质量需求&#xff0c;看质量标准即可。6、 [单选] 自项目开始以来&#xff0c;作为项目经理同事的职能经理一直公开反对该项目&#xff0c;在讨论项目里…

C语言——库函数

常用的函数 https://cplusplus.com/reference/ 没事儿多看看 1 数学函数 #include <math.h> #include <stdio.h> int main() {printf("%lf\n", sqrt(4));//开平方根——>double类型printf("%lf\n", pow(2, 10));//求几次方的——>do…

纯Go语言开发人脸检测、瞳孔/眼睛定位与面部特征检测插件-助力GoFly快速开发框架

前言​ 开发纯go插件的原因是因为目前 Go 生态系统中几乎所有现有的人脸检测解决方案都是纯粹绑定到一些 C/C 库&#xff0c;如 ​​OpenCV​​ 或 ​​​dlib​​​&#xff0c;但通过 ​​​cgo​​​ 调用 C 程序会引入巨大的延迟&#xff0c;并在性能方面产生显著的权衡。…

27 基于51单片机的方向盘模拟系统

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于STC89C52单片机&#xff0c;采用两个MPX4115压力传感器作为两路压力到位开关电路&#xff0c; 采用滑动变阻器连接数模转换器模拟重力加速度传感器电路&#xff1b; 一个按键控制LED灯的点亮与…

win10环境mysql8.4免安装版配置

下载后解压 dos管理员&#xff0c;进入bin目录 mysqld -install net start mysql 出现错误&#xff0c;服务无法启动 MySQL 服务正在启动 . MySQL 服务无法启动。 服务没有报告任何错误。 请键入 NET HELPMSG 3534 以获得更多的帮助。 services.msc&#xff0c;查看服务…

centos更换源文件,换源,替换源

期初怎么折腾就是不行&#xff0c;换了源也是不能使用的&#xff0c;最后发现不是换的源不行&#xff0c;而是之前的源文件不行&#xff0c;然后给所有的源文件在yum源统一放在了bak目录下&#xff0c;随后我们再去下载安装源文件。 您将yum源下载之后&#xff0c;先将您的其他…

网络安全之IP伪造

眼下非常多站点的涉及存在一些安全漏洞&#xff0c;黑客easy使用ip伪造、session劫持、xss攻击、session注入等手段危害站点安全。在纪录片《互联网之子》&#xff08;建议搞IT的都要看下&#xff09;中。亚伦斯沃茨&#xff08;真实人物&#xff0c;神一般的存在&#xff09;涉…

蓝牙定位的MATLAB仿真程序|基于信号强度的定位,平面、四个蓝牙基站(附源代码)

这段代码通过RSSI信号强度实现了蓝牙定位&#xff0c;展示了如何使用锚点位置和测量的信号强度来估计未知点的位置。它涵盖了信号衰减模型、距离计算和最小二乘法估计等基本概念。通过图形化输出&#xff0c;用户可以直观地看到真实位置与估计位置的关系。 文章目录 蓝牙定位原…

机器学习算法(六)---逻辑回归

常见的十大机器学习算法&#xff1a; 机器学习算法&#xff08;一&#xff09;—决策树 机器学习算法&#xff08;二&#xff09;—支持向量机SVM 机器学习算法&#xff08;三&#xff09;—K近邻 机器学习算法&#xff08;四&#xff09;—集成算法 机器学习算法&#xff08;五…

Attention显存统计与分析

Attention显存估计 简单的Attention函数 import torch import torch.nn as nn import einops class Attention(nn.Module):def __init__(self, dim, num_heads8, qkv_biasFalse, qk_scaleNone, attn_drop0., proj_drop0.):super().__init__()self.num_heads num_headshead_d…

Spring系列之批处理Spring Batch介绍

概述 官网&#xff0c;GitHub A lightweight, comprehensive batch framework designed to enable the development of robust batch applications vital for the daily operations of enterprise systems. 执行流程 实战 假设有个待处理的任务&#xff0c;如文件batch-tes…

[保姆式教程]使用labelimg2软件标注定向目标检测数据和格式转换

定向目标检测是一种在图像或视频中识别和定位对象的同时&#xff0c;还估计它们方向的技术。这种技术特别适用于处理有一定旋转或方向变化的对象&#xff0c;例如汽车、飞机或文本。定向目标检测器的输出是一组旋转的边界框&#xff0c;这些框精确地包围了图像中的对象&#xf…

Socket编程:UDP网络编程项目

目录 一、回显服务器 二、翻译器 三、聊天室 一、回显服务器 项目介绍&#xff1a;使用UDPIPv4协议进行Linux网络编程&#xff0c;实现回显服务器和客户端 功能介绍&#xff1a;客户端发送数据&#xff0c;经过服务端再返回到客户端&#xff0c;输出数据 源代码&#xff1…