在Linux系统中,mail命令是一个强大的命令行邮件客户端,常用于自动化脚本发送通知、系统日志报告等场景,要正确使用mail命令,需完成本地邮件传输代理(MTA)的配置、邮件服务器参数设置以及发送/接收测试,以下从环境准备、MTA安装配置、邮件服务器参数设置、常见问题解决及实践案例五个方面详细说明配置过程。

环境准备与MTA安装
mail命令本身不直接发送邮件,需依赖MTA(如sendmail、postfix、exim)或邮件代理(如mutt),以CentOS和Ubuntu为例,安装MTA的命令如下:
- CentOS/RHEL:
yum install sendmail mailx -y # 安装sendmail和mailx(mail命令通常由mailx提供)
- Ubuntu/Debian:
apt update && apt install mailutils -y # mailutils包含mail命令和MTA
安装完成后,需启动并设置MTA开机自启:
systemctl start sendmail # 或postfix systemctl enable sendmail
MTA核心配置
以sendmail为例,主配置文件为/etc/mail/sendmail.cf,但建议通过/etc/mail/access、/etc/mail/local-host-names等文件进行间接配置,避免直接修改主文件。
设置本地域名
编辑/etc/mail/local-host-names,添加服务器域名(如example.com),确保邮件能正确路由到本地:
(图片来源网络,侵删)example.com localhost.localdomain localhost配置访问控制
编辑/etc/mail/access,设置邮件发送权限,例如允许所有IP通过本服务器发送邮件:Connect:RELAY 127.0.0.1 # 仅允许本地中继 Connect:RELAY [服务器IP] # 允许指定IP中继重启MTA使配置生效
systemctl restart sendmail
邮件服务器参数设置
mail命令通过/etc/mail.rc或~/.mailrc文件读取邮件服务器配置,以下是常见邮件服务商的配置示例:
| 邮件服务商 | 协议类型 | (/etc/mail.rc) |
|---|---|---|
| Gmail | SMTP | set from=”user@gmail.com” set smtp=”smtp.gmail.com:587″ set smtp-use-starttls set smtp-auth=login set smtp-auth-user=”user@gmail.com” set smtp-auth-password=”应用专用密码” |
| 企业邮箱 | SMTP | set from=”user@company.com” set smtp=”smtp.company.com:25″ set smtp-auth=login set smtp-auth-user=”user@company.com” set smtp-auth-password=”密码” |
| 本地MTA | 本地发送 | set sendmail=/usr/sbin/sendmail # 直接调用本地MTA |
注意:使用Gmail等第三方服务时,需开启“应用专用密码”,避免直接使用账户密码。

发送与接收邮件测试
发送纯文本邮件
echo "邮件正文内容" | mail -s "邮件主题" recipient@example.com
参数说明:
-s:指定邮件主题-a:添加附件(如-a /path/to/file.pdf)-c:抄送(-c cc@example.com)-b:密送(-b bcc@example.com)
发送HTML邮件
需通过管道结合mailx的-a参数指定Content-Type:
echo "<html><body><h1>HTML邮件</h1></body></html>" | mail -a "Content-Type: text/html" -s "HTML主题" recipient@example.com
查看邮件
- 查看本地邮件:
mail(进入交互界面,输入数字查看邮件,q退出) - 查看特定发件人邮件:
mail -f /var/spool/mail/username
常见问题解决
邮件发送失败(553错误)
原因:MTA未配置允许中继或域名未正确解析。
解决:检查/etc/mail/access中的Connect:RELAY设置,确保发送方IP或域名在允许列表中。连接超时(Connection timed out)
原因:防火墙阻止25/587端口或SMTP服务器地址错误。
解决:开放端口(firewall-cmd --add-port=587/tcp --permanent)并验证SMTP服务器地址。
实践案例:自动化日志邮件通知
编写Shell脚本/usr/local/bin/send_log.sh,每日定时发送系统日志:
#!/bin/bash LOG_FILE="/var/log/messages" DATE=$(date +%Y%m%d) mail -s "系统日志_$DATE" admin@example.com < $LOG_FILE
添加执行权限并设置定时任务:
chmod +x /usr/local/bin/send_log.sh echo "0 6 * * * /usr/local/bin/send_log.sh" | crontab -
相关问答FAQs
Q1: 如何使用mail命令发送带附件的邮件?
A1: 使用-a参数指定附件路径,echo "邮件正文" | mail -s "主题" -a "/path/to/attachment.pdf" recipient@example.com
注意:附件路径需为绝对路径,且文件需存在。
Q2: 配置Gmail SMTP时提示“认证失败”,如何解决?
A2: 主要原因及解决方案:
- 未使用应用专用密码:在Google账户开启“两步验证”后生成16位应用密码,替换原账户密码。
- SMTP服务器错误:确认配置文件中
set smtp="smtp.gmail.com:587",端口587(或465)正确。 - 防火墙拦截:检查本地防火墙是否允许出站587端口。
文章来源网络,作者:运维,如若转载,请注明出处:https://shuyeidc.com/wp/480257.html<
