如何通过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"
提示:可以根据需求动态生成表格行,比如用df、top命令获取系统数据,再通过循环拼接成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




