资讯专栏INFORMATION COLUMN

Shell发送邮件以HTML展示

phodal / 2127人阅读

摘要:有时候,监控一个系统需要在系统出现警告时通过发送邮件来通知相关的负责人。一种是普通邮件,通过附件描述详细报告一种是高级邮件哈哈,本来就是告警,还不赶快看,还要慢慢下载附件打开看所以将附件内容以直接展示到正文处,并通过样式标记警告。

有时候,监控一个系统需要在系统出现警告时通过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邮件作为发送者
设置 -> 账户 -> 下图中开启

3.发送邮件
QQ邮箱对SMTP有如下说明:

#!/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

发送成功了!

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


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 "">$HTML_PATH
echo "">>$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 "">>$HTML_PATH
                echo "">>$HTML_PATH
                echo "">>$HTML_PATH
                echo "">>$HTML_PATH
                echo "">>$HTML_PATH
                let "i++"
        done

}
create_tr

echo "">>$HTML_PATH
echo "
ipconsumfreetotal
"$ip""$m""$f""$t"
">>$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

发送成功!

好玩吧~

参考文章:
https://blog.csdn.net/leshami...
https://my.oschina.net/u/4005...
https://blog.csdn.net/wz94732...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/25091.html

相关文章

  • Shell发送邮件HTML展示

    摘要:有时候,监控一个系统需要在系统出现警告时通过发送邮件来通知相关的负责人。一种是普通邮件,通过附件描述详细报告一种是高级邮件哈哈,本来就是告警,还不赶快看,还要慢慢下载附件打开看所以将附件内容以直接展示到正文处,并通过样式标记警告。 有时候,监控一个系统需要在系统出现警告时通过shell发送邮件来通知相关的负责人。本文讲讲如何shell发送邮件。一种是普通邮件,通过附件描述详细报告;一种...

    roadtogeek 评论0 收藏0
  • Shell发送邮件HTML展示

    摘要:有时候,监控一个系统需要在系统出现警告时通过发送邮件来通知相关的负责人。一种是普通邮件,通过附件描述详细报告一种是高级邮件哈哈,本来就是告警,还不赶快看,还要慢慢下载附件打开看所以将附件内容以直接展示到正文处,并通过样式标记警告。 有时候,监控一个系统需要在系统出现警告时通过shell发送邮件来通知相关的负责人。本文讲讲如何shell发送邮件。一种是普通邮件,通过附件描述详细报告;一种...

    testHs 评论0 收藏0
  • Flask Web Development —— Email

    摘要:函数携带目的地址主题邮件体模板和一组关键字参数。许多扩展操作是在假设有活动的应用程序和请求上下文的情况下进行的。但是当函数在一个不同的线程上执行,应用程序上下文需要人为地创建使用。例如,执行函数可以将邮件发送到的任务队列中。 许多类型的应用程序都会在某些事件发生的时候通知用户,常用的沟通方法就是电子邮件。尽管在Flask应用程序中,可以使用Python标准库中的smtplib包来发送电...

    SKYZACK 评论0 收藏0
  • 正式的介绍「Mutt」:命令行的邮件大师 (一文详解)

    摘要:可以根据发信人主题长度以及关键字等对邮件进行排序分类整理。但是稍有不同的是,称之为,而且需要用命令这样格式执行。比如侧边栏的移动,命令是。这个时候,先在中输入命令查看软件当前的设置如果显示的是,那么就没错,绝对不会显示中文。 为什么要用Mutt?这个世界已经有了成百上千的漂亮邮件客户端,为什么还要用命令行里的?其实说什么功能都没用。说到本质上,其实是一种Geek精神,一种爱折腾的精神,...

    simpleapples 评论0 收藏0
  • 自动化云事件管理

    摘要:我们将通过两个示例来学习如何创建一个事件自动化计划,该计划可使用自动化管理器来执行预先定义的任务,以响应特定警报。自动化管理器提供一个功能强大的通用基础架构,以便自动监控和响应中的事件和警报。 本文作者:Ansuman Padhy, 高级软件工程师, IBM                Ashish Billore, 云系统软件开发人员, IBM                 Pi...

    姘搁『 评论0 收藏0

发表评论

0条评论

阅读需要支付1元查看
<