用 Bash 脚本在 Git 服务器上简单实现了一个 Git Commit Tracker,定期将追踪的指标整理成 CSV 报表。不过要获取这份报表,还需通过 RDP 访问主机,接入 VPN,登录网页堡垒机,唤起 WinSCP,把这份文件下载下来。
如果能通过邮件自动发送到工作邮箱就好了。
这种事情一般用 sendmail
或 mailx
完成。我的测试机安装了 AlmaLinux 9.4,提供了一个功能丰富的 mailx 实现 —— s-nail
:
sudo dnf install s-nail -y
不用理会 /etc/mail.rc
下的全局配置,在 $HOME/.mailrc
中添加公司企业邮箱的 SMTP 配置和机器人账号(其实就是专门创建的用于发送公共邮件的电子邮箱账号)。之前在企业邮箱的帮助文档中查询过配置参数,这里大部分照填即可,仅需注意:
- 连接地址中的协议为
smtps://
(可以理解成 SMTP over TLS),如果 SMTP 服务器使用 587 端口,则可能是使用了 STARTTLS,配置会有一些差别 - 电子邮件服务提供商应该会分配专门的客户端密码,和 HTTP Basic Auth 一样,用户名和密码需要进行 URI 编码
set v15-compat
set mta=smtps://<encodeURIComponent(USERNAME)>:<encodeURIComponent(PASSWORD)>@smtp.exmail.qq.com:465
set smtp-auth=login
set from=<ACCOUNT_TO_SEND_EMAIL>
如果目标机器的 s-nail 版本较旧,也可以写成如下格式(在 Ubuntu 18.04 LTS 上进行了测试):
set smtp=smtps://smtp.exmail.qq.com:465
set from=<ACCOUNT_TO_SEND_EMAIL>
set smtp-auth-user=<USERNAME>
set smtp-auth-password=<PASSWORD>
set smtp-auth=login
AlmaLinux 9(RHEL 9)上的 mailx
指向 s-nail
,以如下命令发送邮件:
echo 'Message body' | mailx --subject='Send from my server' yufanonsoftware@ddrpa.cc
# 当然,也许你会想通过 dry-run 模式调试一下
echo 'Message body' | mailx --debug --subject='Send from my server' yufanonsoftware@ddrpa.cc
在安装多个邮件客户端的系统上直接使用 s-nail
:
echo 'Message body' | s-nail -s 'Send from my server' yufanonsoftware@ddrpa.cc
要将文本文件作为邮件附件,使用 -a(ttachment)
参数:
echo 'Report generated.' | s-nail -s 'Git Commit Tracker' -a '/opt/gct/report-latest.csv' yufanonsoftware@ddrpa.cc
将这些命令提交到 Cron(可以写 Service Unit 和 Timer Unit 的,但是我懒)。