在Linux上,可以通过mail
命令在命令行发邮件,直接敲下mail -s 主题 对方邮件地址
即可开始写邮件,比起图形界面写邮件更方便,而且,正是因为可以通过命令行做到这一切,那么就可以将这些命令组合成脚本,满足特定条件或特定时间即可自动发送邮件,用处多多,例如可以用来发送服务器内存不足时的告警邮件。
安装
mail
一般都会在服务器上安装好,如果没有预装则可以通过安装mailutils
来使用,以ubuntu为例:
1sudo apt install mailutils
安装好后还需要进行发件人配置才可以使用邮箱地址发送邮件。
添加发件人
首先编辑配置文件,mail配置文件地址为/etc/mail.rc
,如果只是希望自己使用,那么可以将配置文件存在~/mailrc
:
1vim /etc/mail.rc
然后添加发件人配置,以网易企业邮箱
为例,按下G
*(大写)*翻到文件最后,增加以下几行:
1set from=admin<admin@wenjinyu.me>
2set smtp=smtps://smtp.ym.163.com:994
3set smtp-auth-user=admin@wenjinyu.me
4set smtp-auth-password=*******
5set ssl-verify=ignore
6set nss-config-dir=/etc/pki/nssdb/
之后就可以用以下命令发送邮件:
1mail -v -s “主题” 收件人
回车后开始输入邮件内容,以Ctrl
+ D
结束输入。
多账户
如果需要配置多个发件账户,则用以下形式:
1account cn163 {
2set from=admin<admin@wenjinyu.me>
3set smtp=smtps://smtp.ym.163.com:994
4set smtp-auth-user=admin@wenjinyu.me
5set smtp-auth-password=*******
6set ssl-verify=ignore
7set nss-config-dir=/etc/pki/nssdb/
8}
9
10account gmail {
11...
12}
此时发送邮件时可以选择特定发件账户:
1mail -v -s “主题” -A cn163 收件人
邮件内容
除了上述在发送前输入邮件内容之外,还可以通过echo
添加内容,方式为:
1echo "邮件内容" | mail -v -s “主题” 收件人
邮件内容可以手动输入,也可以这样将文件内容发送:
1cat /root/a.txt | mail -v -s “主题” 收件人
2
3# or
4mail -v -s “主题” 收件人 < /root/a.txt
添加附件
添加附件使用-a
参数
1mail -v -s “主题” 收件人 -a 附件
也可同时将文件内容作为正文
1mail -v -s “主题” 收件人 -a 附件 < /root/a.txt
错误信息
- Error in certificate: Peer’s certificate issuer is not recognized.
看样子是证书出了问题,所以自建一个信任的证书就行了,还是以网易企业邮箱为例:
1mkdir -p /root/.certs/
2echo -n | openssl s_client -connect smtp.ym.163.com:994 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > /root/.certs/163.crt
3certutil -A -n "GeoTrust SSL CA" -t "C,," -d /root/.certs -i /root/.certs/163.crt
4certutil -A -n "GeoTrust Global CA" -t "C,," -d /root/.certs -i /root/.certs/163.crt
5certutil -L -d /root/.certs
6certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i /root/.certs/163.crt
相应的,配置文件修改如下:
1account cn163 {
2set from=admin<admin@wenjinyu.me>
3set smtp=smtps://smtp.ym.163.com:994
4set smtp-auth-user=admin@wenjinyu.me
5set smtp-auth-password=*******
6set ssl-verify=ignore
7set nss-config-dir=/root/.certs/ # 此处修改
8}
9
10account gmail {
11...
12}
再发送邮件就不会有证书不受信任的提示了。
- 550 5.7.0 DT:SPM smtp-server: 550 5.7.0 DT:SPM
发送太频繁,被判定为垃圾邮件,等几分钟再发吧,更多网易企业邮箱的退信原因可参见:「企业退信的常见问题?-163邮箱常见问题」
用途
配置好mail后,可以设置自动脚本发送邮件,例如,可以在特定时刻进行提醒,又或者用来监控服务器,这里就是一个监控服务器内存用量的脚本:「内存用量提醒 - 温锦瑜的笔记」