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

如何让Bash脚本中PostgreSQL查询结果在邮件中正确格式化?

解决PostgreSQL查询结果邮件格式化问题

问题核心是邮件客户端默认使用比例字体显示内容,而记事本用等宽字体,你用rpad基于等宽字体做的对齐,在比例字体里自然会乱。结合你用的Heirloom Mail 12.5,给你几个实用的解决方法:

方法1:用HTML格式强制等宽显示(最可靠)

Heirloom Mail支持发送HTML邮件,用<pre>标签包裹查询结果,强制邮件客户端用等宽字体渲染:

#!/bin/bash

# 执行PostgreSQL查询,保留原始对齐格式
QUERY_RESULT=$(psql -U 你的用户名 -d 你的数据库 -t -c "SELECT rpad(col1, 20), rpad(col2, 15), rpad(col3, 10) FROM 你的表;")

# 构造HTML内容,用<pre>标签确保等宽
MAIL_CONTENT="<html><body><pre style='font-family: monospace;'>$QUERY_RESULT</pre></body></html>"

# 发送邮件,指定内容类型为HTML
echo "$MAIL_CONTENT" | mail -s "查询结果" -a "Content-Type: text/html" 收件人邮箱@xxx.com

方法2:用psql内置格式化替代手动rpad

psql自带对齐格式化功能,比手动rpad更灵活准确,配合纯文本邮件的提示:

#!/bin/bash

# 用psql的aligned模式自动对齐列,无需手动rpad
QUERY_RESULT=$(psql -U 你的用户名 -d 你的数据库 -t --pset format=aligned -c "SELECT col1, col2, col3 FROM 你的表;")

# 添加提示,引导收件人用等宽字体查看
MAIL_CONTENT="--- 以下内容请切换到等宽字体查看 ---\n\n$query_result"

# 发送纯文本邮件
echo -e "$MAIL_CONTENT" | mail -s "查询结果" 收件人邮箱@xxx.com

方法3:给纯文本邮件指定等宽格式标记

通过设置邮件头,提示客户端用等宽字体渲染纯文本内容(部分客户端支持):

echo "$QUERY_RESULT" | mail -s "查询结果" -a "Content-Type: text/plain; charset=utf-8; format=fixed" 收件人邮箱@xxx.com

为什么记事本里显示正常?

记事本默认使用等宽字体(如Consolas、Courier New),每个字符宽度一致,rpad添加的空格能精准对齐;而邮件客户端默认用比例字体(如Arial),不同字符宽度不同(比如w比i宽),导致空格的对齐效果失效。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 02:48:24