You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Red Hat系统下如何将stdout输出通过mailx正常发送?

解决mailx发送脚本输出格式错乱的问题

嘿,我之前在Red Hat环境里也碰到过一模一样的问题——终端里输出整整齐齐,一用mailx发出去就面目全非,还没法改服务器配置,只能靠脚本绕。给你几个亲测有效的解决思路:

1. 强制指定纯文本格式,禁止自动折叠

mailx经常会自作主张把长行折叠、把连续空格/制表符换成单个空格,咱们直接在发送时明确告诉它要按纯文本原样输出:

# 先把脚本输出存到临时文件(避免管道可能的格式丢失)
./your_script.sh > /tmp/script_output.txt

# 发送时添加Content-Type头,部分mailx版本加-E选项禁止折叠长行
mailx -E -s "脚本运行结果" -a "Content-Type: text/plain; charset=utf-8" your@mail.com < /tmp/script_output.txt

如果你的mailx版本不支持-a选项(有些老版本用-r或者直接在邮件正文里加头),可以试试这种写法:

{
  echo "To: your@mail.com"
  echo "Subject: 脚本运行结果"
  echo "Content-Type: text/plain; charset=utf-8"
  echo ""
  cat /tmp/script_output.txt
} | sendmail -t

(用sendmail兜底,RHEL默认一般都装了)

2. 用工具预处理输出,固定格式对齐

如果你的输出是有列的表格类内容,mailx很容易搞乱对齐,用pr或者column工具先把格式锁死:

# 用pr去掉页眉页脚,固定宽度为80列
./your_script.sh | pr -t -w 80 | mailx -s "对齐后的脚本输出" your@mail.com

# 如果是分隔符分隔的内容,用column做格式化
./your_script.sh | column -t -s "|" | mailx -s "格式化表格" your@mail.com

3. 直接把输出当附件发送(最稳妥的方案)

要是上面的方法都搞不定,干脆把输出打包成附件,这样格式100%和终端里一致:

./your_script.sh > /tmp/script_output.txt
# 用uuencode打包(RHEL默认自带)
uuencode /tmp/script_output.txt script_output.txt | mailx -s "脚本输出附件" your@mail.com

收件人下载附件打开就能看到和终端完全一样的格式,绝对不会乱。

额外小提示

  • 脚本里输出内容时,尽量用printf "%s\n" "$content"代替echo,echo在处理特殊字符和换行时容易出问题;
  • 如果输出里有颜色码,记得先去掉(比如用sed 's/\x1b\[[0-9;]*m//g'),不然邮件里会显示一堆乱码。

内容的提问来源于stack exchange,提问作者SSDdude

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 09:47:17