sendmail邮件服务器搭建步骤详解?新手如何快速配置成功?
- 云服务器
- 2025-12-15
- 3
sendmail邮件服务器搭建是一个涉及多个步骤和技术细节的过程,需要系统性地规划和配置,以下是详细的搭建指南,涵盖环境准备、安装配置、安全设置及测试验证等内容。
环境准备与系统初始化
在开始搭建sendmail邮件服务器前,需确保系统满足基本要求:推荐使用Linux发行版(如CentOS 7+/Ubuntu 20.04),确保系统时间同步(通过ntpdate或chrony服务),并配置静态IP地址,以CentOS 7为例,首先更新系统并安装必要的依赖包:
sudo yum update y sudo yum install y wget vim gccc++ make
关闭防火墙和SELinux(或配置相应策略),避免因权限问题导致服务异常:
sudo systemctl stop firewalld && sudo systemctl disable firewalld sudo setenforce 0 sudo sed i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config
安装与配置Sendmail
-
安装Sendmail
执行以下命令安装sendmail及其相关组件:
安装完成后,启动sendmail服务并设置开机自启:
-
配置本地域名
编辑/etc/hosts文件,确保本地主机名与IP地址正确映射:
sudo vim /etc/hosts ```如下(假设域名为`example.com`,IP为`192.168.1.100`):0.0.1 localhost localhost.localdomain
192.168.1.100 mail.example.com mail
-
生成Sendmail配置文件
备份原始配置文件后,生成新的sendmail.cf:
sudo cp /etc/mail/sendmail.cf /etc/mail/sendmail.cf.bak sudo m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
编辑sendmail.mc文件(关键配置示例):
sudo vim /etc/mail/sendmail.mc修改以下参数:
- DAEMON_OPTIONS(Port=smtp,Addr=0.0.0.0, Name=MTA:监听所有网卡的25端口。
- LOCAL_DOMAIN(example.com:设置本地域名。
- Cwlocalhost:添加信任的本地主机名。
-
系统用户作为邮箱用户
默认情况下,系统用户可接收邮件,创建新用户并设置密码:
sudo useradd m testuser sudo passwd testuser发送测试邮件:echo "Test body" | mail s "Test Subject" testuser@example.com
-
虚拟域与虚拟用户配置
若需支持多个域名或非系统用户邮箱,需配置虚拟域,步骤如下:
- 安装db4工具:sudo yum install y db4utils
- 创建虚拟域映射文件/etc/mail/localhostnames,添加域名: example.com another.com
- 创建虚拟用户映射文件/etc/mail/virtusertable,格式为邮箱@域名 转发地址: user@example.com testuser @another.com admin@another.com
- 生成数据库文件并重启sendmail: sudo makemap hash /etc/mail/virtusertable < /etc/mail/virtusertable sudo systemctl restart sendmail
-
启用TLS加密
生成SSL证书(可使用Let’s Encrypt免费证书),编辑sendmail.mc添加:
生成配置文件后重启服务。
-
配置反垃圾邮件
安装spamassassin和clamav(需提前配置EPEL源):

sudo yum install y spamassassin clamav clamavupdate sudo systemctl start spamassassin clamd@scan sudo systemctl enable spamassassin clamd@scan
编辑/etc/mail/sendmail.mc过滤管道:
INPUT_MAIL_FILTER(`spamassassin', `S=local:/var/spamassassin/spamd.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl INPUT_MAIL_FILTER(`clamav', `S=unix:/var/run/clamd.scan, F=, T=S:4m;R:4m')dnl -
本地测试
使用mailq查看邮件队列,tail f /var/log/maillog实时监控日志,发送测试邮件:
mail s "Test" recipient@example.com输入邮件内容后按Ctrl+D发送。
-
远程测试
使用telnet连接邮件服务器:
telnet mail.example.com 25 EHLO example.com MAIL FROM:<sender@example.com> RCPT TO:<recipient@example.com> DATA Subject: Remote Test This is a test email. . QUIT -
常见问题排查
- 邮件被拒收:检查DNS MX记录是否正确,确认防火墙是否开放25端口。
- 中继被拒绝:编辑/etc/mail/access文件,添加Relay:192.168.1.0/24允许内网中继,执行makemap hash access < access生效。
- 虚拟用户不生效:确认virtusertable.db文件是否存在且权限正确。
- 创建/etc/mail/authinfo文件,添加认证信息(如AuthInfo:smtp.gmail.com "U:root" "I:your@gmail.com" "P:password");
- 生成authinfo.db数据库:makemap hash authinfo < authinfo;
- 在sendmail.mc中定义中继主机和认证参数,重启服务。
修改完成后,重新生成配置文件并重启sendmail:
配置DNS与MX记录
邮件服务器需要正确的DNS解析支持,在域名管理后台添加MX记录,优先级设置为10(数值越小优先级越高):
记录类型: MX 主机名: @ 值: mail.example.com 优先级: 10
确保A记录指向服务器IP:

邮箱用户与虚拟域管理
安全加固与反垃圾邮件配置
测试与故障排查
相关配置参数表
配置文件 作用 关键参数 /etc/mail/sendmail.cf 主配置文件 DaemonOptions、LocalDomain、Cw /etc/mail/localhostnames 本地域名列表 每行一个域名 /etc/mail/virtusertable 虚拟用户映射 user@domain localuser /etc/mail/access 访问控制 Relay:IP、From:OK/DENY /etc/aliases 别名文件 root: admin 相关问答FAQs
Q1: 如何解决邮件发送时提示“Relay access denied”?
A1: 此问题通常因未配置允许中继的IP或域名导致,需编辑/etc/mail/access文件,添加允许中继的规则(如Relay:192.168.1.0/24或Relay:example.com),然后执行makemap hash access < access生成数据库文件,最后重启sendmail服务。
Q2: 如何配置邮件服务器支持外部SMTP认证(如使用Gmail中继)?
A2: 编辑sendmail.mc文件,添加认证机制和TLS支持,并配置authinfo文件存储认证信息,具体步骤包括: