Linux安装Sendmail
Sendmail简介
Sendmail是一款历史悠久且功能强大的邮件传输代理(MTA)软件,广泛应用于Linux/Unix系统中,它负责处理邮件的发送、接收中继,并支持多种邮件协议,如SMTP、ESMTP等,尽管现代邮件系统(如Postfix、Exim)在配置和管理上更为简便,Sendmail仍因其稳定性和高度可定制性,被部分企业和开发者用于特定场景,本文将详细介绍在Linux系统中安装、配置及测试Sendmail的完整流程。

安装前的准备工作
在安装Sendmail之前,需确保系统满足基本要求并完成准备工作:
- 系统兼容性:Sendmail支持主流Linux发行版,如CentOS、Ubuntu、Debian等,本文以CentOS 7为例,其他发行版可能需调整包管理命令。
- 网络配置:确保服务器已正确配置静态IP地址,并设置主机名(
hostname命令),避免因域名解析问题导致邮件发送失败。 - 防火墙与SELinux:
- 关闭或放行Sendmail默认端口(25):
firewall-cmd --permanent --add-port=25/tcp && firewall-cmd --reload。 - 若启用SELinux,需安装
policycoreutils-python包并设置上下文:semanage port -a -t smtp_port -p tcp 25。
- 关闭或放行Sendmail默认端口(25):
- 依赖包:安装必要的编译工具(如
gcc、make)和基础库(如openssl-devel),部分发行版可通过包管理器直接安装Sendmail及其依赖。
安装Sendmail
使用包管理器安装(推荐)
对于大多数Linux发行版,可通过官方仓库直接安装Sendmail,无需手动编译。
- CentOS/RHEL系统:
sudo yum install sendmail sendmail-cf -y # 安装Sendmail及配置文件
- Ubuntu/Debian系统:
sudo apt update && sudo apt install sendmail -y # 安装Sendmail
编译安装(可选)
若需使用最新版本或自定义功能,可从Sendmail官网(https://www.sendmail.org)下载源码编译安装:
wget https://cdn.sendmail.org/sendmail.8.17.1.tar.gz # 下载源码 tar -xzf sendmail.8.17.1.tar.gz && cd sendmail.8.17.1 ./Build -c # 配置编译选项 make && make install # 编译并安装
编译安装过程需依赖Berkeley DB等库,建议提前安装db4-devel或libdb-dev。
配置Sendmail
Sendmail的配置文件位于/etc/mail/目录下,核心文件包括:

sendmail.cf:主配置文件,语法复杂,建议通过m4宏生成。access:控制邮件中继访问权限。virtusertable:虚拟用户映射,用于别名转发。
生成基础配置文件
直接编辑sendmail.cf易出错,推荐使用m4宏生成:
cd /etc/mail cp sendmail.mc sendmail.mc.bak # 备份原配置 vi sendmail.mc # 编辑宏文件
在sendmail.mc中添加以下关键配置:
DAEMON_OPTIONS(`Port=25, Name=MTA')dnl # 监听25端口 FEATURE(`access_db', `hash -o /etc/mail/access.db')dnl # 启用访问控制 FEATURE(`virtusertable', `hash -o /etc/mail/virtusertable.db')dnl # 启用虚拟用户
生成配置文件:
m4 /usr/share/sendmail-cf/m4/cf.m4 sendmail.mc > sendmail.cf
设置邮件中继与访问控制
编辑/etc/mail/access文件,允许或拒绝特定IP/域名的邮件中继:
localhost.localdomain RELAY
192.168.1.0/24 RELAY # 允许内网IP中继
spam.com REJECT # 拒绝特定域名
生成数据库文件:

makemap hash access.db < access
配置虚拟用户(可选)
若需将邮件转发至其他地址,编辑/etc/mail/virtusertable:
user1@example.com forwarding@example.org
@domain.com localuser
生成数据库文件:
makemap hash virtusertable.db < virtusertable
启动与测试Sendmail
启动服务并设置开机自启
sudo systemctl start sendmail # 启动Sendmail sudo systemctl enable sendmail # 设置开机自启 sudo systemctl status sendmail # 检查服务状态
测试邮件发送
- 本地测试:使用
mail命令发送测试邮件:echo "Test email body" | mail -s "Test Subject" root@localhost
检查
/var/log/maillog确认日志输出。 - 远程测试:使用
telnet连接SMTP服务器(需确保防火墙放行25端口):telnet localhost 25 EHLO localhost MAIL FROM: sender@example.com RCPT TO: recipient@example.com DATA Subject: Remote Test This is a test email. . QUIT
常见问题排查
- 邮件发送失败:检查
/var/log/maillog错误日志,常见问题包括DNS解析失败、权限错误或防火墙阻拦。 - 中继被拒绝:确认
access.db配置正确,目标IP是否在允许列表中。 - 虚拟用户无效:检查
virtusertable.db是否正确生成,别名格式是否规范。
安全与优化建议
- 启用TLS加密:配置Sendmail支持SMTPS(465端口)或STARTTLS,防止邮件明文传输。
- 限制中继权限:避免开放25端口至公网,仅允许可信IP访问。
- 定期更新:关注Sendmail官方安全公告,及时更新版本或修复漏洞。
- 日志监控:通过
logrotate管理/var/log/maillog,避免日志文件过大。
Sendmail作为经典的MTA工具,虽配置复杂,但在企业级邮件系统中仍具有重要地位,通过本文的步骤,用户可完成Sendmail的安装、基础配置及测试,实际应用中,建议结合具体需求调整参数,并辅以安全措施,确保邮件服务稳定可靠,对于新手用户,可考虑更易管理的替代方案(如Postfix),但Sendmail的灵活性和稳定性仍使其成为特定场景下的优选。



















