邮件服务使用指南
1. 基本概念
1.1 postfix
Postfix 是一个邮件传输代理(MTA),用于在服务器之间传输电子邮件。采用模块化、简单易懂的设计,强调安全性和可控性。
1.2 电子邮件系统
电子邮件系统由以下几个组件组成:
- 邮件用户代理(MUA,Mail User Agent):用户用于收发邮件的客户端程序,使用IMAP或POP3协议与服务器通信。常用MUA:thunderbird、mutt 等。
- 邮件传输代理(MTA,Mail Transfer Agent):接收来自 MUA 的邮件,将邮件转发给远程服务器上的另一个 MTA,或将其传递给 MDA 交付,使用SMTP协议。常用MTA:sendmail、postfix
- 邮件交付代理(MDA,Mail Deliver Agent):接收电子邮件并存储在用户的邮箱中,会对邮件进行扫描分类,具有过滤等功能。常用MDA:dovecot、procmail
常用协议如下:
- SMTP(Simple Mail Transfer Protocol):发送邮件使用的标准协议
- IMAP(Internet Message Access Protocol):接收邮件使用的标准协议,允许电子邮件客户端下载服务器上的邮件,但是在客户端的操作(如移动邮件、标记已读等),不会反馈到服务器上。
- POP3(Post Office Protocol 3):提供服务器与电子邮件客户端之间的双向通信,客户端的操作都会反馈到服务器上,对邮件进行的操作,服务器上的邮件也会做相应的动作。
2. 检查环境
2.1 检查 MTA
在同一台服务器上安装多个 MTA 可能会导致冲突,因此需要检查是否存在其他 MTA,以 sendmail 为例:
- 检查是否安装 sendmail
>rpm -q sendmail
- 如果已经安装 sendmail,检查其服务状态
>systemctl status sendmail
- 如果 sendmail 服务状态为
active (running)
,则在安装和配置 postfix 之前需要停止 sendmail 服务
>systemctl stop sendmail
- 确保没有设置开机启动
>systemctl disable sendmail
2.2 检查防火墙
如果启用了防火墙服务,请配置相关防火墙服务允许 postfix 服务及对应端口;如果不确定是否启用防火墙服务,请依次检查 firewalld、iptables、nftables 状态,以 firewalld 为例:
- 检查是否安装 firewalld
>rpm -q firewalld
- 如果已经安装 firewalld,检查 firewalld 状态
>systemctl status firewalld
>sudo firewall-cmd --add-service=smtp --permanent
3. 配置 postfix
3.1 安装并启动 postfix 服务
- 检查系统是否已经安装 postfix
>rpm -qa | grep postfix
- 如果尚未安装首先需要安装 postfix,已经安装则可跳过该步骤
>sudo dnf install postfix
- 启动 Postfix 服务
>sudo systemctl start postfix
- 设置开机时自动启动 postfix 服务
>sudo systemctl enable postfix
- 检查 Postfix 状态,此时 postfix 服务状态应该为
active (running)
>sudo systemctl status postfix
3.2 配置 postfix
配置 postfix 可以通过直接修改配置文件 /etc/postfix/main.cf
,也可以通过命令行工具 postconf
进行修改。
- 如果需要修改多个配置参数,或者希望查看整个配置文件的上下文,编辑
/etc/postfix/main.cf
较为方便 - 如果需要快速修改或查询单个配置参数,使用
postconf
较为方便
# 查询配置参数
>postconf <parameter_name>
# 设置配置参数
>sudo postconf -e '<parameter_name> = <value>'
初次配置需要修改多项内容,使用直接修改配置文件 /etc/postfix/main.cf
的方法修改以下配置:
- myhostname:设置邮件服务器的主机名,格式是 host.domain.extension
myhostname = main.opencloudos.com
- mydomain:设置邮件系统的域名,格式是 host.domain.extension
mydomain = opencloudos.com
- myorigin:设置发件人地址的域名,通常与 mydomain 相同
myorigin = $mydomain
- inet_interfaces:设置监听的网络接口,通常设置为
all
以便监听所有可用的网络接口。
inet_interfaces = all
- mydestination:定义了哪些域名的邮件应该被视为本地邮件。通常设置为主机名、域名以及本地域名
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
- mynetworks:定义邮件服务器可信任的发件人,值通常是一个以逗号分隔的 IP 地址和子网掩码列表。
mynetworks = 127.0.0.0/8
- home_mailbox:定义了用户的邮件存储位置,通常设置为
Maildir/
home_mailbox = Maildir/
默认设置为空,邮件存储于 /var/spool/mail/username
文件
设置值为 Maildir/
,邮件存储于 /home/username/Maildir
目录
- 修改配置后需要重新加载 Postfix 服务:
>sudo systemctl reload postfix
- 查看邮件服务器日志,可以看到成功启动 postfix 服务
>head /var/log/maillog
2023-05-30T11:00:56.049431+08:00 localhost postfix/postfix-script[4882]: starting the Postfix mail system
2023-05-30T11:00:56.057701+08:00 localhost postfix/master[4884]: daemon started -- version 3.7.2, configuration /etc/postfix
3.3 使用telnet测试配置是否有效
- 创建测试用户 sender、receiver
>useradd sender
>passwd sender
>useradd receiver
>passwd receiver
- 使用 telnet 测试
>telnet localhost smtp
Trying ::1...
Connected to localhost.
Escape character is '^]'.
220 main.opencloudos.com ESMTP Postfix
ehlo localhost // 向服务器发送问候信息,并请求服务器返回支持的邮件传输协议和扩展功能
250-main.opencloudos.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250-DSN
250-SMTPUTF8
250 CHUNKING
mail from:sender // 填写发件人
250 2.1.0 Ok
rcpt to:receiver // 填写收件人
250 2.1.5 Ok
data // 开始输入邮件正文
354 End data with <CR><LF>.<CR><LF>
. // 结束输入邮件正文
250 2.0.0 Ok: queued as E89E340145
quit // 退出
221 2.0.0 Bye
Connection closed by foreign host.
- 查看接收到的邮件
>cat /home/receiver/Maildir/new/1685451254.Vfc01I20030M722181.localhost.localdomain
Return-Path: <sender@opencloudos.com>
X-Original-To: receiver
Delivered-To: receiver@opencloudos.com
Received: from localhost (localhost [IPv6:::1])
by main.opencloudos.com (Postfix) with ESMTP id E89E340145
for <receiver>; Tue, 30 May 2023 20:53:17 +0800 (CST)
Message-Id: <20230530125402.E89E340145@main.opencloudos.com>
Date: Tue, 30 May 2023 20:53:17 +0800 (CST)
From: sender@opencloudos.com
- 查看邮件服务器日志获取更多信息:
>tail /var/log/maillog
- 更多阅读:
man postfix(1)
、man postconf(1)
、man postconf(5)