维护服务器的时候,在很多脚本环境中需要从命令行中发送邮件。如果使用默认的mail命令,通常发件人会因为IP,SPF签名, DKIM认证等原因不能通过邮箱检测而进入垃圾箱甚至不能正确投递。使用SMTP协议通过第三方邮箱发信则能很好解决此问题。在这里选用的是SSMTP,供大家参考。
安装配置SSMTP
第一步:安装SSMTP
主流Linux系统目前都已经有ssmtp包,直接通过包管理安装即可,Debian下:
# apt-get install ssmtp
第二步:配置SSMTP
现在,需要对SSMTP进行配置,通常是通过独立的配置文件进行。在本文中我使用Gmail SMTP服务器。关于Gmail SMTP服务器的详情请看:https://support.google.com/a/answer/176600?hl=en
# vi /etc/ssmtp/ssmtp.conf
修改文件当中的值如下:
mailhub=smtp.gmail.com:587
UseSTARTTLS=YES
[email protected]
AuthPass=XXXXXXXXXXXXXXX
TLS_CA_File=/etc/pki/tls/certs/ca-bundle.crt
- mailhub: SMTP服务器:服务器端口
- UseSTARTTLS: 如果SMTP服务器使用TLS,设置为”YES”
- AuthUser: 完整Gmail邮箱(带@gmail.com)
- AuthPass: 邮箱对应的密码
- TLS_CA_File: 有时候会用到,如果遇到下列错误 “send-mail: Cannot open smtp.gmail.com:587”
第三步:测试发信
现在可以用SSMTP给自己的邮箱发一封测试邮件,以确保一切正常:
# ssmtp [email protected]
Subject: This is Subject Line
Email content line 1
Email content line 2
Email content line 3
^d
编写完邮件之后按CTRL+d (^d)即可发送,检查收件箱确保收到邮件
第四步(可选):设置为默认发信程序
# alternatives --config mta
There are 2 programs which provide 'mta'.
Selection Command
-----------------------------------------------
1 /usr/sbin/sendmail.ssmtp
*+ 2 /usr/sbin/sendmail.sendmail
Enter to keep the current selection[+], or type selection number: 1
测试发信程序:
# sendmail -V
sSMTP 2.61 (Not sendmail at all)
# echo test | mail -v -s "Test mail" [email protected]
防止Crontab发送错误报告邮件
在配置完上述文件之后会收到很多邮件,仔细查看之后发现是crontab所触发的,这个时候需要编辑 /etc/crontab ,在当中加入如下代码即可解决
MAILTO=""
参考资料
- How to Send Email via SMTP Server from Linux Command Line (with SSMTP): https://tecadmin.net/send-email-smtp-server-linux-command-line-ssmtp/
- Send mail from command line with external smtp server on Linux: http://www.binarytides.com/linux-mail-with-smtp/
- How to stop email report from Cron: https://askubuntu.com/questions/175464