Centos7通过shell发送邮件
阅读数:268 评论数:0
跳转到新版页面分类
Linux
正文
一、安装mailx
Centos7自带mailx软件包,有/usr/bin/mail命令,配置文件为/etc/mail.rc,如果没有软件包,可以安装
yum install mailx
二、修改配置文件
vim /etc/mail.rc
# smtp服务器认证的用户名
set from=test@qq.com
# smtp服务器的地址
set smtp=smtp.exmail.qq.com
# 邮件认证的方式
set smtp-auth=login
# smtp服务器认证的用户名
set smtp-auth-user=test@qq.com
# smtp服务器认证的用户密码(授权码)
set smtp-auth-password=test_password
# 忽略验证
set ssl-verify=ignore
set nss-config-dir=/etc/maildbs/
三、发送邮件
1、直接命令行中执行
mail -s "邮件主题" 收件人地址
上面的命令回车执行后,会等待用户的输入,当输入完成后,使用ctrl+D键,结束并发送邮件。
2、使用echo和管道
echo "测试邮件" | mail -s "邮件主题" 收件人地址
echo "邮件内容" | mail -s "邮件主题" -a 附件 收件地址
四、云服务器25端口不可用的解决
大部分的云服务器不是支持直接使用25/tcp端口使用smtp协议的,要想正常发送邮件,应该使用465/tcp端口的smtps(smtp over ssl)协议。
# mail config
set from=xxx@qq.com
set smtp=smtps://smtp.qq.com:465
set smtp-auth-user=xxx@qq.com
set smtp-auth-password=hhngmvfdsypdbhbb
set smtp-auth=login
set nss-config-dir=/root/.certs
set ssl-verify=ignore
特别要注意smtps这一行,
#创建/root/.certs目录
mkdir -p /root/.certs
#下载证书到 /root/.certs 目录,本例是下载163证书
echo -n | openssl s_client -connect smtp.163.com:465 | sed -ne '/-BEGIN CERTIFICATE-/,/-END CERTIFICATE-/p' > ~/.certs/163.crt
#添加一个SSL证书到本地:
certutil -A -n "GeoTrust SSL CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
#再次添加一个公有证书到本地:
certutil -A -n "GeoTrust Global CA" -t "C,," -d ~/.certs -i ~/.certs/163.crt
#标记证书被信任
cd /root/.certs/
certutil -A -n "GeoTrust SSL CA - G3" -t "Pu,Pu,Pu" -d ./ -i 163.crt
如果在发送邮件过程中出现错误:Error in certificate: Peer's cerificate issuer is not recognized,重新执行上面的部分。
在发送邮件时,额外添加-v参数我,可以查看执行过程。
五、发送html格式
mailx -s "The Subject $(echo -e \\\nContent-Type: text/html)" user@gmail.com < email.html
六、监控示例
#!/bin/sh
#######################################
## 名称: monitor-cuihs.sh
## 描述:监控主机的cpu使用率、内存使用率、硬盘使用率
## 检测 zookeeper可用性、mysql可用性、tdengine可用性
## redis可用性、mpush-server、alloc、maifodor
######################################
CPU=`cat /proc/cpuinfo |grep processor | wc -l`
# 当前系统时间
DATE=`date "+%F %H:%M:%S"`
IP="192.168.137.88"
MAIL="502319042@qq.com"
US=$(vmstat |awk 'NR==3{print $13}')
SY=$(vmstat |awk 'NR==3{print $14}')
IDLE=$(vmstat |awk 'NR==3{print $15}')
WAIT=$(vmstat |awk 'NR==3{print $16}')
USE=$(($US+$SY))
MEM_TOTAL=$(free -h|awk '/Mem/{print $2}')
MEM_AVAIL=$(free -h|awk '/Mem/{print $7}')
MEM_USE=$(free -h|awk '/Mem/{print $3}')
TOTAL_DISK=$(fdisk -l|awk -F [" ":]+ ' BEGIN{OFS="="}/^Disk \/dev/ {print$3}')
PART_USE=$(df -h| awk 'BEGIN{OFS="="}NR>1{print $1,$2,$3,$4,$5,$6}')
PART_USE_STR=""
for i in $PART_USE; do
PART=$(echo $i |cut -d "=" -f1)
PART_TOTAL=$(echo $i |cut -d "=" -f2)
PART_USE=$(echo $i |cut -d "=" -f3)
PART_AVAIL=$(echo $i |cut -d "=" -f4)
PART_RATIO=$(echo $i |cut -d "=" -f5)
MOUNT=$(echo $i |cut -d "=" -f6)
PART_USE_STR="$PART_USE_STR <tr><td>$MOUNT</td><td>$PART_TOTAL</td><td>$PART_USE</td><td>$PART_AVAIL</td><td>$PART_RATIO</td></tr>"
done
MYSQL_C=$(ps -ef|grep mysqld|grep -vc grep)
if [ $MYSQL_C -gt 0 ]; then
MYSQL_STATUS="启动"
else
MYSQL_STATUS="未启动"
fi
TAOS_C=$(ps -ef|grep taosd|grep -vc grep)
if [ $TAOS_C -gt 0 ]; then
TAOS_STATUS="启动"
else
TAOS_STATUS="未启动"
fi
MPUSH_C=$(ps -ef|grep mpush-server|grep -vc grep)
if [ $MPUSH_C -gt 0 ]; then
MPUSH_STATUS="启动"
else
MPUSH_STATUS="未启动"
fi
ALLOC_C=$(ps -ef|grep mpush-alloc|grep -vc grep)
if [ $ALLOC_C -gt 0 ]; then
ALLOC_STATUS="启动"
else
ALLOC_STATUS="未启动"
fi
MAIFODOR_C=$(ps -ef|grep maifodor|grep -vc grep)
if [ $MAIFODOR_C -gt 0 ]; then
MAIFODOR_STATUS="启动"
else
MAIFODOR_STATUS="未启动"
fi
ZOOKEEPER_PORT_C=$(jps -l|grep -c zookeeper)
if [ $ZOOKEEPER_PORT_C -gt 0 ]; then
ZOOKEEPER_STATUS="启动"
else
ZOOKEEPER_STATUS="未启动"
fi
REDIS_PORT_C=$(ps -ef|grep -c redis-server|grep -vc grep)
if [ $REDIS_PORT_C -gt 0 ]; then
REDIS_STATUS="启动"
else
REDIS_STATUS="未启动"
fi
echo "
<html> </label>
<table>
<tr>
<th>监控项</th>
<th>总量</th>
<th>已用</th>
<th>可用</th>
<th>使用率</th>
</tr>
<tr>
<td>主机</td>
<td colspan=\"4\">$IP</td>
</tr>
<tr>
<td>硬盘总量</td>
<td colspan=\"4\">$TOTAL_DISK G</td>
</tr>
$PART_USE_STR
<tr>
<td>CPU使用率</td>
<td colspan=\"4\">$USE%</td>
</tr>
<tr>
<td>内存</td>
<td>$MEM_TOTAL</td>
<td>$MEM_USE</td>
<td>$MEM_AVAIL</td>
</tr>
<tr>
<td>mysql</td>
<td colspan=\"4\">$MYSQL_STATUS</td>
</tr>
<tr>
<td>taos</td>
<td colspan=\"4\">$TAOS_STATUS</td>
</tr>
<tr>
<td>redis</td>
<td colspan=\"4\">$REDIS_STATUS</td>
</tr>
<tr>
<td>zookeeper</td>
<td colspan=\"4\">$ZOOKEEPER_STATUS</td>
</tr>
<tr>
<td>mpush</td>
<td colspan=\"4\">$MPUSH_STATUS</td>
</tr>
<tr>
<td>alloc</td>
<td colspan=\"4\">$ALLOC_STATUS</td>
</tr>
<tr>
<td>maifodor</td>
<td colspan=\"4\">$MAIFODOR_STATUS</td>
</tr>
<tr>
<td>检查时间</td>
<td colspan=\"4\">$DATE</td>
</tr>
</table>
</html>" |mailx -s "$IP主机监控信息 $(echo -e \\\nContent-Type: text/html)" $MAIL