Mail 服务器

news2025/1/25 4:32:06

Mail 服务器

    • 1. 概念及协议
    • 2. 工具
      • 2.1 Postfix
      • 2.2 dovecot
      • 2.3 bind
    • 3. 搭建
      • 3.1 DNS服务设置
      • 3.2 安装配置 postfix
      • 3.3 安装配置 dovecot
    • 4. foxmail验证

1. 概念及协议

邮件服务器也采用的是C/S工作模式,通过SMTP,POP,IMAP协议来是实现邮件的发送和接收的。

  • SMTP 的全称是“Simple Mail Transfer Protocol”,即简单邮件传输协议。它是一组用于从源地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式。SMTP 协议属于 TCP/IP 协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。SMTP 服务器就是遵循 SMTP 协议的发送邮件服务器。 SMTP 认证,简单地说就是要求必须在提供了账户名和密码之后才可以登录 SMTP(postfix) 服务器,这就使得那些垃圾邮件的散播者无可乘之机。 增加 SMTP 认证的目的是为了使用户避免受到垃圾邮件的侵扰。 使用的端口是25,SMTP信件认证协议SMTPS,使用的端口是465

  • POP3是Post Office Protocol 3的简称,即邮局协议的第3个版本,它规定怎样将个人计算机连接到Internet的邮件服务器和下载电子邮件的电子协议。它是因特网电子邮件的第一个离线协议标准, 协议允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上,比如通过客户端收取了邮箱中的3封邮件并移动到其他文件夹,邮箱服务器上的这些邮件是没有同时被移动的 。使用的端口是110,POP3信件认证协议POP3S,使用的端口是995

  • IMAP全称是Internet Mail Access Protocol,即交互式邮件存取协议,它是跟POP3类似邮件访问标准协议之一。不同的是,开启了IMAP后,您在电子邮件客户端收取的邮件仍然保留在服务器上同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。所以无论从浏览器登录邮箱或者客户端软件登录邮箱,看到的邮件以及状态都是一致的。将邮件留在服务器端直接对邮件进行管理、操作,比POP3更先进支持邮件头部预览主题来源,基于TCP/IP,使用143端口,使用的端口是110,IMAP信件认证协议IMAPS,使用的端口是993

POP3 和 IMAP 区别

1.IMAP客户端上收取邮件后邮件依旧保留在服务器上,同时在客户端上的操作也会保留在服务器端,POP3不会
2.IMAP更好的支持从多个设备中随时访问新邮件
3.IMAP提供的摘要游览功能可以让你阅读完所有的邮件到达时间、主题、发件人、大小等信息后才作初是否下载的决定。
4.pop3需要下载所有的邮件,IMAP不能将所有的邮件下载,而是通过客户端直接对服务器上的邮件进行操控。所有的IMAP可以对数据进行加密从而保证通信安全。
5.IMAP整体上为用户带来了更为便捷和可靠的的体验 ----pop3 更容易丢失邮件或者多次重复下载相同的邮件。

SASL 全称Simple Authentication and Security Layer,是一种用来扩充C/S模式验证能力的机制。在 Postfix可以利用SASL来判断用户是否有权使用转发服务,或是辨认谁在使用你的服务器。

MTA(因特网邮件传送代理;Mail Transfer Agent)指的是来自MUA的信件转发给指定的用户的程序。
用于收发Mail的程序一般统称为邮件用户代理MUA(Mail User Agent)。

2. 工具

本次搭建采用经典搭配:
postfix(作为发送邮件服务器)+dovecot(作为接收邮件服务器)+mysql(作为数据库)

2.1 Postfix

Postfix 是一种电子邮件服务器,它是由任职于IBM华生研究中心(T.J. Watson Research Center)的荷兰籍研究员Wietse Venema为了改良sendmail邮件服务器而产生的。

  • 工作流程图解
    在这里插入图片描述

2.2 dovecot

Dovecot 是一个开源的 IMAP 和 POP3 邮件服务器,支持 Linux/Unix 系统。

2.3 bind

NDS服务设置

3. 搭建

部署 mail 服务的节点规划

IP主机名节点
192.168.70.183mail.testmail.comMail服务器
192.168.70.70masterDNS服务器

3.1 DNS服务设置

DNS详细配置

1)修改 master 节点 bind 配置文件 named.conf

	[root@mail ~]# tail -20 /etc/named.conf
		};
		
		zone "." IN {
		        type hint;
		        file "named.ca";
		};
		//添加内容-起始
		zone "testmail.com" IN {
		        type master;
		        file "testmail.com.zone";
		};
		
		zone "70.168.192.in-addr.arpa" {		#主机网段倒序填写,例如192.168.70.183
		        type master;
		        file "testmail.com.local";
		};
		//添加内容-截止	
		include "/etc/named.rfc1912.zones";
		include "/etc/named.root.key";

2)修改区域解析库文件,添加解析记录

[root@mail named]# cat testmail.com.zone
$TTL 1D
@       IN SOA  testmail.com. admin.testmail.com. (
                                        2023001 ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
            NS      testmail.com.
        IN  MX      10      mail.testmail.com.
        IN  A       192.168.70.183
mail    IN  A       192.168.70.183
[root@mail named]# cat testmail.com.local
$TTL 1D
@       IN SOA  testmail.com. testmail.com. (
                                        2023003 ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum
        IN      NS      testmail.com.
183     IN      PTR     testmail.com.
183     IN      PTR     mail.testmail.com.

3)检查配置文件是否有语法错误

[root@mail named]# named-checkzone testmail.com testmail.com.zone
zone testmail.com/IN: loaded serial 2023001
OK
[root@mail named]# named-checkzone testmail.com testmail.com.local
zone testmail.com/IN: loaded serial 2023003
OK

4)重启 bind 服务

[root@mail named]# systemctl restart named

5)将 mail 主机 DNS 解析指向 DNS 服务器

[root@node2 ~]# cat /etc/resolv.conf
# Generated by NetworkManager
#search 253
# nameserver 219.148.204.66
nameserver 192.168.70.183
#nameserver 192.168.70.70

6)测试解析

①安装 dig 命令

[root@mail ~]# yum install -y bind-utils

②解析域名,结果如图 所示。

[root@node2 ~]# dig -t A mail.testmail.com

; <<>> DiG 9.11.4-P2-RedHat-9.11.4-26.P2.el7_9.9 <<>> -t A mail.testmail.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: SERVFAIL, id: 7491
;; flags: qr rd ra; QUERY: 1, ANSWER: 0, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;mail.testmail.com.             IN      A

;; Query time: 1 msec
;; SERVER: 192.168.70.183#53(192.168.70.183)
;; WHEN: Wed Apr 19 00:47:29 CST 2023
;; MSG SIZE  rcvd: 46

3.2 安装配置 postfix

1)删除 postfix

①清除 postfix 软件包

[root@mail named]# rpm -e postfix

②删除 postfix 用户

[root@mail named]# userdel postfix
[root@mail named]# groupdel postfix
groupdel: group 'postfix' does not exist
[root@mail named]# groupdel postdrop

③新建用户

[root@mail named]# groupadd -g 2525 postfix
[root@mail named]# useradd -g 2525 -u 2525 -M -s /sbin/nologin postfix
[root@mail named]# groupadd -g 2526 postdrop
[root@mail named]# useradd -g 2526 -u 2526 -M -s /sbin/nologin postdrop

2)安装 postfix

[root@mail ~]# yum install -y postfix

3)配置 postfix,修改内容

[root@mail ~]# vi /etc/postfix/main.cf
#修改邮局主机名
myhostname = mail.testmail.com
#修改邮局域名
mydomain = testmail.com
#寄出邮件域名,删除注释
myorigin = $mydomain
#修改监听所有网卡,删除注释
inet_interfaces = all
#修改可接收邮件的主机名和域名,可被中继的域名
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
#修改可接收邮件的主机名和域名,可被中继的主机
#按实际情况填写
mynetworks = 172.16.51.0/24, 127.0.0.0/8
#取消注释
home_mailbox = Maildir/
#指定信任网段类型
mynetworks_style = host 
#指定允许中转邮件的域名,取消注释
relay_domains = $mydestination 

4)添加权限,设置开机启动并重启服务

[root@mail ~]# chown postfix.postfix -R /var/lib/postfix/
[root@mail ~]# chown postfix.postfix /var/spool/ -R
[root@mail ~]# systemctl enable postfix
[root@mail ~]# systemctl restart postfix

5)测试发送邮件

①创建测试邮件接收用户,并设置密码

[root@mail named]# useradd cwl
[root@mail named]# echo "111111" | passwd --stdin cwl
Changing password for user cwl.
passwd: all authentication tokens updated successfully.

②安装 Telnet 服务

[root@mail ~]# yum -y install telnet

③Telnet 连接邮件服务器 25 端口,发送邮件。

[root@mail ~]# telnet mail.testmail.com 25
Trying 172.16.51.20...
Connected to mail.testmail.com.
Escape character is '^]'.
220 mail.testmail.com ESMTP Postfix
mail from:root@testmail.com //发件人
250 2.1.0 Ok
rcpt to:cwl //收件人
250 2.1.5 Ok
data //填写邮件
354 End data with <CR><LF>.<CR><LF>
hello,this is test mail. //输入邮件内容
. //以“.”结束输入
250 2.0.0 Ok: queued as DC5693000085
quit //退出
221 2.0.0 Bye
Connection closed by foreign host

6)查看发送状态

[root@mail ~]# tail /var/log/maillog|grep sent
Oct 6 07:20:12 localhost postfix/local[2755]: DC5693000085: to=<cwl@testmail.com>, 
orig_to=<cwl>, relay=local, delay=31, delays=31/0.01/0/0.02, dsn=2.0.0, status=sent (delivered to 
maildir)

3.3 安装配置 dovecot

1)安装 dovecot

[root@mail ~]# yum install -y dovecot

2)修改 dovecot 相关配置文件

[root@mail named]# grep -v "^#" /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
#如果不使用 IPv6,请修改为*
listen = *
login_trusted_networks =192.168.0.0/16
[root@mail ~]# vim /etc/dovecot/conf.d/10-auth.conf
#9 行: 取消注释并修改
#是否允许在沒有 SSL/TLS 下以明码登录
disable_plaintext_auth = no
#97 行: 添加
auth_mechanisms = plain login
[root@mail ~]# vim /etc/dovecot/conf.d/10-mail.conf
#30 行: 取消注释并添加
mail_location = maildir:~/Maildir
[root@mail ~]# vim /etc/dovecot/conf.d/10-master.conf
#88-90 行: 取消注释并添加 Postfix smtp 验证
unix_listener /var/spool/postfix/private/auth {
 mode = 0666
 user = postfix
 group = postfix
}

3)重启 dovecot 服务

[root@mail yum.repos.d]# systemctl restart dovecot

4)测试接收邮件

[root@mail ~]# telnet mail.testmail.com 110
Trying 172.16.51.20...
Connected to mail.testmail.com.
Escape character is '^]'.
+OK Dovecot ready.
user cwl //登录用户
+OK
pass 111111 //密码
+OK Logged in.
List //邮件列表
+OK 1 messages:
1 404
.
retr 1 //输入邮件编号查看邮件
+OK 404 octets
Return-Path: <root@testmail.com>
X-Original-To: cwl
Delivered-To: cwl@testmail.com
54
Received: from unknown (unknown [172.16.51.20])
 by mail.testmail.com (Postfix) with SMTP id DC5693000085
 for <cwl>; Sun, 6 Oct 2019 07:19:41 +0000 (UTC)
Message-Id: <20191006071952.DC5693000085@mail.testmail.com>
Date: Sun, 6 Oct 2019 07:19:41 +0000 (UTC)
From: root@testmail.com
hello,this is test mail.
.quit //退出
+OK Logging out
Connection closed by foreign host.

至此,邮件服务器收发功能搭建完成

4. foxmail验证

输入前面录入的账号密码,服务器IP
在这里插入图片描述
下面是我们刚刚使用postfix发送的邮件,可以新增用户,进行互发邮件
在这里插入图片描述

为了写本文,笔者先去学习了DNS服务器搭建的整体流程,以及配置文件的修改规则等等,这篇文章只能说是点到为止,像域外互访加密传输等等功能都没有包含,有兴趣的朋友可以参考其他作者的文章。

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

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

相关文章

Java入坑之IO操作

目录 一、IO流的概念 二、字节流 2.1InputStream的方法 2.2Outputstream的方法 2.3资源对象的关闭&#xff1a; 2.4transferTo()方法 2.5readAllBytes() 方法 2.6BufferedReader 和 InputStreamReader 2.7BufferedWriter 和 OutputStreamWriter 三、路径&#xff1a;…

Qt5 编译QtXlsx并添加为模块[Windows]

00.QtXlsx是什么&#xff1f;能干什么&#xff1f; QtXlsx是一个可以读写Excel文件的库。它不需要Microsoft Excel&#xff0c;可以在Qt5支持的任何平台上使用。 可以创建、读取、编辑.xlsx文件。 01.如何编译&#xff1f; 1.1编译环境&#xff1a; Windows10平台&#xff1b;…

es6笔记-let、const、var的区别

let、const、var的区别 变量提升 var 声明的变量存在变量提升,在声明前可以调用&#xff0c;直为undefindconsole.log(a); var a 1;相当于&#xff1a;var a; console.log(a); a 1;let和const不存在变量提升&#xff0c;变量要在声明前调用&#xff0c;否则报错console.log(a…

DNS服务器配置

一&#xff0c;正向解析 1>安装软件bind 提供DNS服务的软件叫bind&#xff0c;服务名是named [rootserver ~]# yum install bind -y 2>对三个配置文件进行修改 - /etc/named.conf : 主配置文件&#xff0c;共59行&#xff0c;去除注释和空行之和有效行数仅30行左右&…

Golang程序报错:fatal error: all goroutines are asleep - deadlock

文章目录 1.原始代码2.错误原因分析3. 解决方案4. 经验总结5. 练习 完整的报错信息如下&#xff1a; fatal error: all goroutines are asleep - deadlock!goroutine 1 [chan receive]: main.(*WorkerManager).KeepAlive(0xc000088f60)/root/go_workspace/studygoup/05.go:66 0…

Doris(7):数据导入(Load)之Routine Load

例行导入功能为用户提供了义中自动从指定数据源进行数据导入的功能 1 适用场景 当前仅支持kafka系统进行例行导入。 2 使用限制 支持无认证的 Kafka 访问&#xff0c;以及通过 SSL 方式认证的 Kafka 集群。支持的消息格式为 csv 文本格式。每一个 message 为一行&#xff0c;…

【Cpp】手撕搜索二叉树(K模型)

文章目录 二叉搜索树概念详解二叉搜索树的概念二叉搜索树的操作(大致思路)二叉搜索树的查找二叉搜索树的插入二叉搜索树的删除(最重点) 手撕搜索二叉树代码结点定义(以key型为例,KV型将在下一篇博客中介绍)树结构定义深拷贝构造函数与构造函数赋值重载析构函数遍历(结果按从小到…

软件测试的当下分析

在没有清晰能见度的情况下驾驶汽车不仅非常危险&#xff0c;也十分鲁莽。这会让我们和我们周边的人随时面临着碰撞、受伤、甚至死亡的风险。如果不能看到前方的道路&#xff0c;我们就无法预测潜在的危险或障碍&#xff0c;从而无法做出明智的决定并采取适当的行动。 同样&…

什么是ddos攻击?ddos攻击有哪些危害?

一、什么是 DDoS 攻击&#xff1f; DDoS 是 Distributed Denial of Service 的缩写&#xff0c;翻译成中文就是 “分布式拒绝服务”。DDoS 攻击将处于不同位置的多个计算机联合起来作为攻击平台&#xff0c;对一个和多个目标发动 DDoS 攻击&#xff0c;从而成倍提高攻击威力。…

分布式系统概念和设计-进程通信中的(网络API设计)

分布式系统概念和设计 进程间通信 中间件层 请求-应答协议 编码和外部数据表示 因特网协议的API 进程间通信的特征 一对进程间进行消息传递需要两个消息通信操作的支持&#xff08;send和receive&#xff09;&#xff0c;用于定义目的地和消息的定义。 为了能够使一个进程能…

煤化工废水除总氮除硬度,矿井水除砷除氟解决方案

随着环保标准的提升&#xff0c;大部分煤矿企业对矿井水要求执行地表三类水标准&#xff0c;氟化物要求小于1mg/l&#xff0c;这类项目存在体量大、氟含量低、水质偏差等特点。 RO工艺制备纯水是煤化工行业生产的一个辅助环节&#xff0c;会产生大量的浓盐水&#xff0c;由于浓…

十五分钟带你学会 Electron

文章目录 什么是 Electron为什么要选择 Electron安装 Electron桌面CSDN实战Electron 基础配置Electron 进程主进程渲染进程主进程与渲染进程的区别主进程与渲染进程的通信 Electron 跨平台问题Electron 部署打包应用程序发布应用程序 Electron 跨端原理总结 什么是 Electron E…

NE555 Motor LED Chaser

文章目录 1.前言2.资料下载 1.前言 这个是从YouTube上搬运来的&#xff0c;如图所示 2.资料下载 所需材料 #1# 10k resistor 1 #2# 10k variable resistor 1 #3# 10uf capacitor 1 #4# 3mm blue led 4 #5# 3mm yellow led 4 #6# 3mm red led 4 #7# 3mm green led 4 #8# 3mm…

【Linux网络】网络基础(TCP/IP协议栈、局域网通信原理、封装与解包、有效载荷分用)

文章目录 1、认识网络1.1 重新看待计算机结构1.2 网络的问题1.3 初识网络协议1.4 TCP/IP五层结构 2、网络与操作系统2.1 网络和OS的关系2.2 局域网&#xff08;以太网&#xff09;通信原理和MAC地址2.3 主机的跨网络2.4 有效载荷的分用 1、认识网络 在早年计算机之间是相互独立…

关于自身存在的严重问题总结_4/19

今早二次面试喜马拉雅&#xff0c;面试官给我的评价是&#xff1a; 1.经验不足&#xff1b; 2.实用方面生疏、理解不到位&#xff1b; 原因很正常&#xff0c;我项目自己亲手实操的太少了&#xff0c;一直在背&#xff0c;但是背 不是去读源码 去理解&#xff1b; 项目也大…

基于springboot的班级综合测评管理系统源码数据库论文

目录 1 绪论 1.1课题研究的背景 1.2 课题研究的内容 1.3 系统开发的意义 1.4初步设计方法与实施方案 1.5 本文研究内容 2相关技术介绍 2.1 Java技术 2.2B/S架构 2.3 MySQL介绍 2.4 Springboot框架 3系统需求分析 3.1 可行性分析 3.1.1 经济可行性分…

AI大模型在各行业肆虐,打工人该如何保住自己的饭碗?

开篇我先下个结论&#xff0c;那就是&#xff1a;人类在科技领域的高效率竞争&#xff0c;正在把我们生活的这个商业世界一步步地数字化。而数字化&#xff0c;不单单是AI智能的发展成果&#xff0c;更会成为它所热衷的生长温床&#xff0c;为后续人工智能的一路狂飙奠定了绝佳…

2、picodet转onnx裁剪及python onnxruntime推理

文章目录 1 对picodet xs1.1 动态图转静态图1.2 静态图转onnx1.3 paddle 含后处理 all 版本的推理1.4 onnx 含后处理 all 进行推理1.5 onnx 不含后处量 base模型推理1.5.1 获取onnx模型任一节点的输出1.5.2 base模型的推理 1.6、对picodet-xs模型进行优化1.6.1 picodet-xs base…

项目文档规范及总体布局

软件文档可以分为开发文档和产品文档两大类&#xff0c;交付用户还有用户文档。 1|1开发文档 软件开发计划需求规格说明书软件概要设计说明数据库设计说明软件详细设计说明可执行程序生成说明软件测试计划软件测试说明软件测试报告安装部署手册源代码交付说明上线部署方案上线…

spark读写时序数据库 TDengine 错误总结

最近在用spark读取、写入TDengine 数据库遇到了这样一个问题&#xff1a; JDBCDriver找不到动态链接库&#xff08;no taos in java.library.path&#xff09; 我本地都好好的&#xff0c;但是一上服务器写入就会报这个错误&#xff0c;看了很久没有排查出问题&#xff0c;后…