You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何通过Shell脚本发送表格格式的电子邮件

用Shell脚本发送带表格格式的电子邮件的实现方法

嘿,这里有几个实用的方案,能帮你轻松用Shell脚本发出带表格的邮件,我自己日常运维里经常用到,分享给你:

方法1:借助mail命令发送HTML格式邮件

大部分Linux发行版都自带mail命令(如果没有的话,先装mailutils或者postfix包),只要把邮件内容写成HTML格式,再指定Content-Type为text/html就行。

示例脚本:

#!/bin/bash

# 定义邮件基本信息
TO="recipient@example.com"
SUBJECT="服务器资源使用统计"
FROM="sender@example.com"

# 构造HTML表格内容
HTML_CONTENT='
<html>
<head>
<style>
table {border-collapse: collapse; width: 100%;}
th, td {border: 1px solid #ddd; padding: 8px; text-align: left;}
th {background-color: #f2f2f2;}
</style>
</head>
<body>
<h3>今日服务器资源使用情况</h3>
<table>
  <tr>
    <th>服务器IP</th>
    <th>CPU使用率</th>
    <th>内存使用率</th>
    <th>磁盘使用率</th>
  </tr>
  <tr>
    <td>192.168.1.100</td>
    <td>35%</td>
    <td>62%</td>
    <td>48%</td>
  </tr>
  <tr>
    <td>192.168.1.101</td>
    <td>22%</td>
    <td>55%</td>
    <td>52%</td>
  </tr>
</table>
</body>
</html>
'

# 发送邮件
echo "$HTML_CONTENT" | mail -a "Content-Type: text/html" -s "$SUBJECT" -r "$FROM" "$TO"

提示:可以根据需求动态生成表格行,比如用dftop命令获取系统数据,再通过循环拼接成HTML表格的<tr><td>内容。

方法2:用sendmail实现更灵活的邮件发送

如果需要更精细控制邮件头,sendmail是个不错的选择,它支持直接构造完整的邮件内容(包括MIME头)。

示例脚本:

#!/bin/bash

TO="recipient@example.com"
SUBJECT="用户访问统计报表"
FROM="sender@example.com"

# 构造完整邮件内容
cat << EOF | sendmail -t
From: $FROM
To: $TO
Subject: $SUBJECT
MIME-Version: 1.0
Content-Type: text/html; charset="UTF-8"

<html>
<body>
<h4>本周用户访问数据</h4>
<table border="1">
  <tr>
    <th>日期</th>
    <th>访问次数</th>
    <th>独立访客数</th>
  </tr>
  <tr>
    <td>2024-05-20</td>
    <td>1234</td>
    <td>456</td>
  </tr>
  <tr>
    <td>2024-05-21</td>
    <td>1567</td>
    <td>512</td>
  </tr>
</table>
</body>
</html>
EOF

注意:运行这个脚本需要确保sendmail服务正常运行,并且配置了正确的邮件中继。

实用小技巧

  • 如果要从CSV文件生成表格,可以用awk命令读取CSV内容,自动拼接HTML行:
    # 假设data.csv内容是:日期,访问次数,独立访客数
    TABLE_ROWS=$(awk -F ',' 'NR>1 {print "<tr><td>"$1"</td><td>"$2"</td><td>"$3"</td></tr>"}' data.csv)
    
    然后把$TABLE_ROWS插入到HTML表格的对应位置就行。
  • 测试时可以先把邮件发给自己,确认表格格式显示正常,再正式发送给收件人。

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

火山引擎 最新活动