Linux下不使用-a选项修改mail命令邮件的From字段问题
解决Ubuntu Server 16.04中mail命令默认发件人From字段修改问题
我来帮你搞定这个问题——你现在用root身份在Ubuntu 16.04上执行mail命令发邮件,默认From字段是root@mydomain.org,想改成admin@mydomain.org,而且有多个脚本在执行这个操作,之前用-a选项但遇到了问题,咱们分几种靠谱的方案来处理:
1. 先修正你现有命令的拼写错误
你给出的命令里域名写错了:-a "From: admin@mydmain.org"里的mydmain应该是mydomain,先把这个修正过来试试,正确的命令应该是:
echo "content" | mail -s "subject" "recipient@wherever.org" -a "From: admin@mydomain.org"
如果只是拼写问题,修正后应该就能生效,但如果还是不行,咱们看更彻底的配置方案。
2. 配置root用户的mail默认发件人(推荐,适合多脚本场景)
给root用户设置全局的mail配置,这样所有脚本里的mail命令都自动用admin@mydomain.org作为发件人,不用每次加-a选项:
- 编辑root用户的mail配置文件:
vi /root/.mailrc - 在文件里添加一行:
set from=admin@mydomain.org - 保存退出后,直接执行脚本里的命令就行,比如:
这时候邮件的From字段就会自动变成echo "content" | mail -s "subject" "recipient@wherever.org"admin@mydomain.org。
3. 修改全局mail配置(影响所有用户)
如果你想让服务器上所有用户的mail命令都使用这个发件人,或者root的用户级配置没生效,可以修改全局配置文件:
- 编辑/etc/mail.rc:
vi /etc/mail.rc - 添加同样的配置行:
set from=admin@mydomain.org - 保存退出后,所有用户执行mail命令都会默认用这个发件人。
4. 调整MTA(比如Postfix)的发件人映射
如果上面的方法都不生效,可能是你服务器上的MTA(比如Postfix)强制覆盖了发件人字段,这时候需要配置MTA的发件人映射:
针对Postfix的配置步骤:
- 编辑Postfix的generic映射文件:
vi /etc/postfix/generic - 添加一行映射规则,把root的发件人替换成admin:
root@mydomain.org admin@mydomain.org - 生成映射数据库:
postmap /etc/postfix/generic - 编辑Postfix的主配置文件/etc/postfix/main.cf,添加或修改以下配置:
smtp_generic_maps = hash:/etc/postfix/generic - 重启Postfix服务使配置生效:
systemctl restart postfix
这样所有从root@mydomain.org发出的邮件都会被Postfix自动替换成admin@mydomain.org。
为什么-a选项可能不生效?
有时候MTA会忽略用户通过mail命令手动添加的From头,尤其是当系统开启了发件人验证或者有严格的邮件策略时,这时候修改配置文件或者MTA映射的方式更可靠,也更适合你有多个脚本的场景,不用每个脚本都重复写-a选项,减少出错概率。
内容的提问来源于stack exchange,提问作者Ilka
相关产品推荐
相关产品推荐

