背景
项目中搭建了一套集群环境,整个集群机器的网络可用性通过一个shell脚本来进行监控。该脚本在检测网络连通性失败的情况下会打印错误日志并发送邮件通知给相关人员。那如何使用linux命令来发送邮件呢?
这里找到了一个好工具:mailx。
简介
Mailx is an intelligent mail processing system, which has a command syntax reminiscent of ed(1) with lines replaced by messages. It is based on Berkeley Mail 8.1, is intended to provide the functionality of the POSIX mailx command, and offers extensions for MIME, IMAP, POP3, SMTP, and S/MIME. Mailx provides enhanced features for interactive use, such as caching and disconnected operation for IMAP, message threading, scoring, and filtering. It is also usable as a mail batch language, both for sending and receiving mail.
Mailx是一个mail处理程序,拥有这丰富的命令行语法来发送邮件。
安装
我们使用如下命令进行安装:
#centos sudo yum install mailx -y #Ubuntu sudo apt install heirloom-mailx -y
配置
配置文件
Centos:
/etc/mail.rc
Ubuntu:
/etc/nail.rc或者/etc/s-nail.rc
配置内容
#/etc/s-nail.rc 替换成实际系统的配置文件
cat >> /etc/s-nail.rc << EOF set smtp=smtp.126.com set from= xxx@126.comset set smtp-auth-user=xxx@126.com set smtp-auth-password=DUFPNGHRMZTTSXWH set smtp-auth=login EOF
解释一下:
- smtp:指的是smtp服务的地址,这里我使用的是126邮箱的smtp服务地址
- from:指的是邮件源地址
- smtp-auth:指的是邮箱用户名
- smtp-auth-password:指的是客户端授权码(不是邮箱密码)
- smtp-auth:默认设置为login即可
发送邮件
交互式
这种我们一般用的少,主要是用于测试:
输入:mail xxx@163.com
输入主题
输入内容
按ctrl+d,结束输入,然后回车
非交互式
1)echo "邮件内容" | mail -s "主题" 邮箱地址
我用的就是该方式,如下图:
2)mail -s "主题" "邮箱地址" < "path/filename"
这种是直接把指定的文件内容读取出来作为邮件内容发送
博主:测试生财(一个不为996而996的测开码农)
座右铭:专注测试开发与自动化运维,努力读书思考写作,为内卷的人生奠定财务自由。
内容范畴:技术提升,职场杂谈,事业发展,阅读写作,投资理财,健康人生。
csdn:https://blog.csdn.net/ccgshigao
博客园:https://www.cnblogs.com/qa-freeroad/
51cto:https://blog.51cto.com/14900374
微信公众号:测试生财(定期分享独家内容和资源)