Centos7通过shell发送邮件

阅读数:16 评论数: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 

在发送邮件时,额外添加-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