如何搭建一台邮箱服务器,配置满分邮箱

如何搭建一台邮箱服务器,配置满分邮箱

        搭建一台个人邮箱服务器听上去非常有技术含量,但只要准备工作充分,并且选择合适的软件,配置满分的邮箱,其实并没有想象中那么困难。在这篇文章中,我们将介绍搭建邮箱服务器的 必备条件,以及一些关键的注意事项,帮助你更顺利地完成这个项目。

1. 开放 25 端口

25 端口 是 SMTP(Simple Mail Transfer Protocol)协议的标准端口,用于在邮箱服务器之间传递邮件。因此,要想让你的邮箱服务器能够正常向外发送邮件,首先需要确保 25 端口是放行状态 的。

国内环境的 25 端口问题

在国内,许多云服务提供商默认是 屏蔽 25 端口 的。比如 阿里云腾讯云 等大厂,出于安全和防止垃圾邮件的考量,默认会锁住 25 端口。如果你需要放行 25 端口,通常需要申请解锁。例如,阿里云支持通过 安全管控 服务申请解封出站 25 端口,但有一些限制:

  • 解封后的 25 端口只能用于连接第三方的 SMTP 服务,不允许直接用于发送邮件。
  • 如果被检测到大量发送邮件,25 端口仍有可能被再次封禁。

如下图:

海外云服务商的情况

在国外的云服务商环境下,默认情况 25 端口也是关闭的。比如:

  • AWS(Amazon Web Services)
  • Azure(微软 Azure)
  • Google Cloud
  • Oracle Cloud
  • Vultr
  • RackNerd

这些云主机服务商都出于安全原因,默认关闭了 25 端口。你需要根据具体的服务商文档进行申请开放。在实际操作中,国外主机相对国内主机来说,解封 25 端口的流程可能会更简洁一些。

建议

如果你只是需要 发送邮件(如网站的通知邮件),考虑使用第三方 SMTP 服务(如 Gmail、SendGrid、Mailgun)。这样不仅可以避免 25 端口的限制,还能利用这些服务商的反垃圾邮件机制,提升发送邮件的成功率和安全性。

2. 购买一个域名

选择一个域名是搭建邮箱服务器的重要步骤。虽然 普通域名 也可以,但为了提升邮件投递成功率,最好选择 顶级域名(如 .com、.net 等)。这不仅能提升你的品牌形象,还能更好地进行邮件反垃圾配置。

配置 RDNS 记录的重要性

RDNS(Reverse DNS)记录,即反向域名解析记录,是很多邮件服务器用来验证发件人身份的重要机制。如果你的邮箱服务器没有配置 RDNS 记录:

  • 邮件评级会比较低,容易被判定为垃圾邮件。
  • 发出去的邮件可能会进入收件方的垃圾箱,甚至被直接拒收。

因此,确保你的域名服务商 支持配置 RDNS 记录 是非常重要的。大部分海外域名服务商(如 Cloudflare、Namecheap)支持这种配置,但有些国内服务商可能不提供这一功能。

3. 选择邮箱服务器软件

邮箱服务器软件是搭建过程中的核心组件。这里推荐使用开源项目 Stalwart Mail Server,它不仅功能强大,而且使用简单,并且拥有友好的 Web 管理界面,方便用户管理邮箱账号和监控邮件状态。

为什么选择 Stalwart?

  • 开源与可控性:Stalwart 是一个开源项目,你可以完全掌控其代码和功能,遇到问题时可以自行修改,避免了对作者支持的依赖。
  • 简单易用:Stalwart 提供了简洁的安装文档,并且拥有 Web 管理界面,适合初学者和有经验的用户。
  • 高扩展性:Stalwart 底层基于 Postfix 和 Dovecot 等成熟的组件,支持 IMAP、POP3、SMTP 等多种协议,功能非常全面。

项目地址:Stalwart Mail Server 开源仓库

安装指南:官方安装文档

安装提示

安装 Stalwart 非常简单,官方文档提供了详细的安装步骤。以下是一些安装过程中的提示和注意事项:

  • 系统环境:建议选择 Ubuntu 或 Debian 系统,安装过程较为顺利。
  • 依赖组件:请确保安装了 Postfix 和 Dovecot,Stalwart 依赖这两个组件来处理邮件传输和存储。
  • 防火墙配置:除了 25 端口,建议同时放行 143(IMAP)、993(IMAP over SSL)、110(POP3)、995(POP3 over SSL)等端口。

登陆界面,如下图:

登陆后配置域名,如下图:

 配置邮箱账户,增加邮箱账户,这里增加一个admin的,名称是发邮件用户 就像admin@xxx.com

如下图:

3. 配置满分邮箱

  配置满分邮箱,是为了保证我们发出去的邮件是对方可以正确接收,不会在对方的垃圾箱或者是拒收。

满分测试

测试邮箱地址:Newsletters spam test by mail-tester.com

先看一下,全部配置完后的满分测试结果:

        如果只是安装完邮箱,配置最基本的mx,那么分数会很低。你此时尝试发邮件到一些常有邮箱可能触发一些条件,让你的IP或域名直接进入一些机构的黑名单。比如我搭建好后就尝试发送到微软的hotmail 邮箱后造成邮箱服务器IP 直接进入spamhaus 黑名单,从此再也无法给hotmail 邮箱或其它邮箱发邮件。

测试邮箱发送时,没配置相关项直接进入spamhaus的黑名单记录,如下图:

上图第一个时间是进入黑名单时间,也是 发邮件到自己的hotmail测试时间,结果也是发送失败的,qq邮箱是可以正常接收的只是进入了垃圾类型。

这是后面配置完所有配置项,但还在黑名单时的扣分效果,如下图:

配置项

除了 RDNS 记录外,建议同时配置以下 DNS 记录,以提升邮箱服务器的可靠性和安全性:

  • SPF 记录:Sender Policy Framework,用于防止邮件伪造。
  • DKIM 记录:DomainKeys Identified Mail,提供邮件签名,确保邮件内容未被篡改。
  • DMARC 记录:Domain-based Message Authentication, Reporting & Conformance,结合 SPF 和 DKIM 使用,防止邮件欺诈。

这几个配置项一般在域名服务商控制台可以配置,如果域名使用cdn托管的,则在cdn服务商配置即可,如下图:

上图配置的SPF,DKIM,DMARC,记录数据都不用自己去生成,在Stalwart的域名-记录已生成有,直接复制粘贴即可非常方便,如下图:

详细记录如下图:

全部配置好后,测试发邮件结果正常,可以接收并且不会在垃圾类别的邮件,如下图:

其它邮箱平台测试了也收发正常,也没有进入垃圾邮箱,一切完美。 

总结

        搭建一台个人邮箱服务器需要满足一定的条件,尤其是在 25 端口和域名配置上可能会遇到一些限制。但只要做好充分的准备,并选择合适的邮箱服务器软件,如 Stalwart,整个过程并不复杂。希望这篇文章能帮到你顺利搭建自己的邮箱服务器。如果你有任何问题或建议,欢迎在评论区留言!

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

DevOps工程技术价值流:打造卓越项目协作的优化宝典

一、引言 解锁项目协作的无限潜力,覆盖全链路实现流畅高效。 在当今瞬息万变的商业环境中,项目协作的效率和效果直接关系到企业的竞争力和市场响应速度。DevOps工程技术价值流中的项目协作优化,不仅是技术层面的革新,更是团队协…

【JAVA毕业设计】基于Vue和SpringBoot的冬奥会科普平台

本文项目编号 T 610 ,文末自助获取源码 \color{red}{T610,文末自助获取源码} T610,文末自助获取源码 目录 一、系统介绍二、数据库设计三、启动教程四、功能截图五、文案资料5.1 选题背景5.2 国内外研究现状 六、核心代码6.1 查询项目类型6.…

基于的图的异常检测算法OddBall

OddBall异常检测算法出自2010年的论文《OddBall: Spotting Anomalies in Weighted Graphs》,它是一个在加权图(weighted graph)上检测异常点的算法,基本思路为计算每一个点的一度邻域特征,然后在整个图上用这些特征拟合出一个函数&#xff0c…

网络工程师教程第6版(2024年最新版)

网络工程师教程(第6版)由清华大学出版社出版,由工业和信息化部教育与考试中心组编,张永刚、王涛、高振江任主编,具体介绍如下。 相关信息: 出版社: 清华大学出版社 ISBN:9787302669197 内容简介: 本书是工业和信息化部教育与考试中心组织编写的考试用书。本书 根据…

算法复杂度——大O表示法

参考视频:常见的大O表示法有哪些?时间复杂度是什么?_哔哩哔哩_bilibili

Maven maven项目构建的生命周期 Maven安装配置 IDEA 配置 Maven

一,Maven的概述 Maven的作用:专门用于管理和构建Java项目的工具,它的主要功能有: 提供了一套标准化的项目结构提供了一套标准化的构建流程(编译,测试,打包,发布……)提…

排序算法(基础)大全

一、排序算法的作用: 排序算法的主要作用是将一组数据按照特定的顺序进行排列,使得数据更加有序和有组织。 1. 查找效率:通过将数据进行排序,可以提高查找算法的效率。在有序的数据中,可以使用更加高效的查找算法&…

GraphLLM:基于图的框架,通过大型语言模型处理数据

GraphLLM是一个创新的框架,它允许用户通过一个或多个大型语言模型(LLM)来处理数据。这个框架不仅提供了一个强大的代理,能够执行网络搜索和运行Python代码,还提供了一套工具来抓取网页数据,并将其重新格式化…

TransFormer--解码器:概括

TransFormer--解码器:概括 假设我们想把英语句子I am good(原句)翻译成法语句子Je vais bien(目标句)。首先,将原句I am good送入编码器,使编码器 学习原句,并计算特征值。在前文中&…

3D Gaussian Splatting 代码层理解之Part1

2023 年初,来自法国蔚蓝海岸大学和 德国马克斯普朗克学会的作者发表了一篇题为“用于实时现场渲染的 3D 高斯泼溅”的论文。该论文提出了实时神经渲染的重大进步,超越了NeRF等以往方法的实用性。高斯泼溅不仅减少了延迟,而且达到或超过了 NeRF 的渲染质量,在神经渲染领域掀…

K8s学习笔记之了解k8s的网络模型

文章目录 docker 网络模型容器与容器之间,容器与宿主机之间如何通信容器访问外部网络外部网络访问容器 k8s 网络模型CNIpod 网络配置流程 k8s 热门网络插件介绍Flannel 来源Calico 来源Cilium 来源 k8s 网络插件的工作模式Flannel 的工作模式Calico 的工作模式BGP 和…

探索高效的 Prompt 框架:RBTR 提示框架的奥秘与优势

前言 在当今数字化的时代,人工智能(AI)已经成为我们生活和工作中不可或缺的一部分。而 Prompt 作为与 AI 交互的关键工具,其质量直接影响着我们获取信息的准确性和有用性。今天,我们将深入探讨一个通用的 Prompt 框架…

丹摩征文活动 | 深度学习实战:UNet模型的训练与测试详解

🍑个人主页:Jupiter. 🚀 所属专栏:Linux从入门到进阶 欢迎大家点赞收藏评论😊 目录 1、云实例:配置选型与启动1.1 登录注册1.2 配置 SSH 密钥对1.3 创建实例1.4 登录云实例 2、云存储:数据集上传…

# 10_ Python基础到实战一飞冲天(一)--linux基础(十)

10_ Python基础到实战一飞冲天(一)–linux基础(十)–软链接硬链接-tar-gzip-bzip2-apt-软件源 一、其他命令-04-文件软链接的演练实现 1、ubuntu 桌面文件如下图: 2、需求:文件软链接的演练(演…

Python学习27天

字典 dict{one:1,two:2,three:3} # 遍历1: # 先取出Key for key in dict:# 取出Key对应的valueprint(f"key:{key}---value:{dict[key]}")#遍历2,依次取出value for value in dict.values():print(value)# 遍历3:依次取出key,value …

【Linux】进程的优先级

进程的优先级 一.概念二.修改优先级的方法三.进程切换的大致原理:四.上下文数据的保存位置: 一.概念 cpu资源分配的先后顺序,就是指进程的优先权(priority)。 优先权高的进程有优先执行权利。配置进程优先权对多任务环…

ubuntu无密码用SCP复制文件到windows

默认情况下,ubuntu使用scp复制文件到windows需要输入密码: scp *.bin dev001@172.16.251.147:~/Desktop/. 为了解决每次复制文件都要输入密码这个问题,需要按如下操作: 1.创建ssh密钥 ssh-keygen -t ed25519 -C "xxx_xxx_xxx@hotmail.com" 2.使用scp复制公钥到w…

单片机GPIO中断+定时器 软件串口通信

单片机GPIO中断定时器 软件串口通信 解决思路代码示例 解决思路 串口波特率9600bps,每个bit约为1000000us/9600104.16us; 定时器第一次定时时间设为52us即半个bit的时间,其目的是偏移半个bit时间,之后的每104us采样并读取1bit数据。使得采样…

使用Web Components构建模块化Web应用

💓 博客主页:瑕疵的CSDN主页 📝 Gitee主页:瑕疵的gitee主页 ⏩ 文章专栏:《热点资讯》 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 使用Web Components构建模块化Web应用 引言 Web Co…

每行数据个数在变的二维数组的输出

#include<stdio.h> int main() {//定义四个一维数组int arr1[1] { 1 };int arr2[3] { 1,2,3 };int arr3[5] { 1,2,3,4,5 };int arr4[7] { 1,2,3,4,5,6,7 };//把四个一维数组放进一个二维数组int* arr[4] { arr1,arr2,arr3,arr4};//预先计算好每一个数组真实的长度in…