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