邮件群发 php shell,Shell发送邮件以HTML展示

有时候,监控一个系统需要在系统出现警告时通过shell发送邮件来通知相关的负责人。本文讲讲如何shell发送邮件。

一种是普通邮件,通过附件描述详细报告;一种是高级邮件(哈哈),本来就是告警,还不赶快看,还要慢慢下载附件打开看?所以将附件内容以HTML直接展示到正文处,并通过样式标记警告。

1.安装sendEmail工具

下载、解压、配置环境变量

]# wget http://caspian.dotconf.net/menu/Software/SendEmail/sendEmail-v1.56.tar.gz

]# tar -zxf sendEmail-v1.56.tar.gz -C SendEmail/

#配置环境变量这里不一样,不在profile文件里配置,而是拷贝到系统环境变量已有的路径中

]# cd ~/myApp/SendEmail/

]# cp sendEmail /usr/local/bin/

2.开启邮箱的SMTP

本文使用QQ邮件作为发送者

设置 -> 账户 -> 下图中开启

bVbrgux?w=754&h=229

3.发送邮件

QQ邮箱对SMTP有如下说明:

bVbrguq?w=543&h=155

#!/bin/bash

RECIVER="Wish0123@163.com"

SENDER="964478654@qq.com"

SENDER_USERNAME=964478654

#密码填写SMTP第三方客户端授权码

SENDER_PASSWD=***********

ATTACHMENT_PATH=/root/workspace/sh/attach_test.txt

#如下图描述,作为邮件发送方应填这个hostname

STMP_HOST=smtp.qq.com

MESSAGEL_SUBJECT="Have Fun"

MESSAGE_BODY="报警啊..."

sendEmail -f $SENDER -t $RECIVER -a $ATTACHMENT_PATH \

-s $STMP_HOST -xu $SENDER_USERNAME -xp $SENDER_PASSWD \

-u $MESSAGEL_SUBJECT -m $MESSAGE_BODY \

-o message-charset=utf-8

发送后报错了:

*******************************************************************

Using the default of SSL_verify_mode of SSL_VERIFY_NONE for client

is deprecated! Please set SSL_verify_mode to SSL_VERIFY_PEER

possibly with SSL_ca_file|SSL_ca_path for verification.

If you really don't want to verify the certificate and keep the

connection open to Man-In-The-Middle attacks please set

SSL_verify_mode explicitly to SSL_VERIFY_NONE in your application.

*******************************************************************

at /usr/local/bin/sendEmail line 1906.

invalid SSL_version specified at /usr/share/perl5/vendor_perl/IO/Socket/SSL.pm line 444.

意思是SSL版本不对,原因是在cent7中Perl的版本5.16,而应该使用更低版本。或者不用SSL,也就需要在脚本最后一行的sendEmail命令添加一个参数-o tls=no

sendEmail -f $SENDER -t $RECIVER -a $ATTACHMENT_PATH \

-s $STMP_HOST -xu $SENDER_USERNAME -xp $SENDER_PASSWD \

-u $MESSAGEL_SUBJECT -m $MESSAGE_BODY \

-o message-charset=utf-8 -o tls=no

发送成功了!

bVbrgyk?w=880&h=498

我擦,居然被当成诈骗钓鱼邮件。。

4.HTML版

邮箱直接展示html需要两个条件:

一是把要展示的数据使用html标签封装起来,就可以随意增加样式了;

二是在sendEmail增加参数-o message-content-type=html

这里是根据系统内存情况发送系统邮件,当集群中机器的使用内存超过总内存80%的机器信息标红。

[root@NN1 sh]# cat memory_info

ip consum free total

192.168.1.10 100 100 200

192.168.1.11 1 239 240

192.168.1.12 350 50 400

192.168.1.13 40 24 64

192.168.1.14 77 33 110

192.168.1.15 150 250 400

编写脚本

#!/bin/bash -x

RECIVER="Wish0123@163.com"

SENDER="964478654@qq.com"

SENDER_USERNAME=964478654

#密码填写SMTP第三方客户端授权码

SENDER_PASSWD=xuxjxankheuubcjd

STMP_HOST=smtp.qq.com

MESSAGEL_SUBJECT="Have Fun"

HTML_PATH=html_path

echo "

echo "ipconsumfreetotal">>$HTML_PATH

echo "

">>$HTML_PATH

create_tr() {

i=2

lines=$(cat memory_info | wc -l)

while [ $i -le $lines ]

do

j=1

ip=$(awk 'NR==i {print $j}' i=$i j=$j memory_info)

let "j++"

m=$(awk 'NR==i {print $j}' i=$i j=$j memory_info)

let "j++"

f=$(awk 'NR==i {print $j}' i=$i j=$j memory_info)

let "j++"

t=$(awk 'NR==i {print $j}' i=$i j=$j memory_info)

tr="

"

#shell不能直接作小数运算

#更简单的运算写法是$[$m + 5]

if [ $(expr $m \* 5) -gt $(expr $t \* 4) ]; then

tr="

"

fi

echo $tr>>$HTML_PATH

echo "

"$ip"">>$HTML_PATH

echo "

"$m"">>$HTML_PATH

echo "

"$f"">>$HTML_PATH

echo "

"$t"">>$HTML_PATH

echo "

">>$HTML_PATH

let "i++"

done

}

create_tr

echo "

">>$HTML_PATH

echo "

">>$HTML_PATH

MESSAGE_BODY=$(cat $HTML_PATH)

sendEmail -f $SENDER -t $RECIVER -a $ATTACHMENT_PATH \

-s $STMP_HOST -xu $SENDER_USERNAME -xp $SENDER_PASSWD \

-u $MESSAGEL_SUBJECT -m $MESSAGE_BODY \

-o tls=no message-charset=utf-8 message-content-type=html

发送成功!

bVbrhoM?w=425&h=432

好玩吧~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值