前言:继前篇zabbix邮件乱码问题解决,转码后,问题是解决了,但是又发现问题,有时候告警邮件没有邮件内容,只有标题,一直没找出原因,所以就换了Python脚本发送邮件,代码如下。

使用前当然是要先安装python了,然后是导入相关的运行库smtplib,python的smtplib提供了一种很方便的途径发送电子邮件,它对smtp协议进行了简单的封装。

#!/usr/bin/python
#coding:utf-8
import smtplib
from email.mime.text import MIMEText
import sys
# configure your own parameters here
#下面邮件地址的smtp地址
mail_host = 'smtp.mail.qq.com'
#用来发邮件的邮箱,在发件人抬头显示(不然你的邮件会被当成是垃圾邮件)
mail_user = 'XXXX@qq.com'
#上面邮箱的密码
mail_pass = 'XXXX!'
#上面smtp地址的主网站地址
mail_postfix = 'mail.qq.com'
def send_mail(to_list,subject,content):
me = mail_user+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content, 'plain', 'utf-8')
# 必须使用'utf-8'参数,否则默认为us-ascii, 在部分邮件客户端中文会显示为乱码
msg['Subject'] = subject
msg['From'] = me
msg['to'] = to_list
try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,to_list,msg.as_string())
s.close()
return True
except Exception,e:
print str(e)
return False
if __name__ == "__main__":
send_mail(sys.argv[1], sys.argv[2], sys.argv[3])

脚本主要就改4项:

#下面邮件地址的smtp地址
mail_host = 'smtp.mail.qq.com'
#用来发邮件的邮箱,在发件人抬头显示(不然你的邮件会被当成是垃圾邮件)
mail_user = 'XXX@qq.com'
#上面邮箱的密码
mail_pass = 'XXXXX'
#上面smtp地址的主网站地址
mail_postfix = 'mail.qq.com'

这个脚本需要输入三个参数来测试:

第一个是要发送的邮件地址,

第二个是邮件标题,

第三个是邮件内容

python sendmail.py XXXX@qq.com title 'content'

收到邮件就完成了.

发送邮件改进:

  支持发送多人,支持发送附件,代码如下:

#!/usr/bin/python
#coding:utf-8
#
import smtplib
import sys
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
from email.mime.text import MIMEText #配置你的邮箱信息
mail_host = 'smtp.mail.qq.com'
mail_user = 'XXXX@qq.com'
mail_pass = 'XXXX'
mail_postfix = 'mail.qq.com' #发送邮件函数
def send_mail(to_list,subject,content,file_list):
#采用related定义内嵌资源的邮件体
msg = MIMEMultipart('related') #邮件内容
msgtext = MIMEText(content, 'plain', 'utf-8')
msg.attach(msgtext) #附件部分
for attachfile in file_list.split(','):
attach = MIMEApplication(open(attachfile,'rb').read())
attach.add_header('Content-Disposition', 'attachment', filename=attachfile)
msg.attach(attach) me = mail_user+"<"+mail_user+"@"+mail_postfix+">"
msg['Subject'] = subject
msg['From'] = me
mail_to_list = to_list.split(',')
msg['to'] = ','.join(mail_to_list) try:
s = smtplib.SMTP()
s.connect(mail_host)
s.login(mail_user,mail_pass)
s.sendmail(me,mail_to_list,msg.as_string())
s.close()
return True
except Exception,e:
print "发送失败"+str(e)
return False if __name__ == "__main__":
send_mail(sys.argv[1],sys.argv[2],sys.argv[3],sys.argv[4])
 
  用法:
        ./sendmail.mult.py     "xxxxxx@qq.com,xxxxx@163.com"    "title_test"    "content1234"    "attachfile1,attachfile2"
  说明:多个邮箱用逗号隔开,多个附件用邮件隔开。
 
  还可以实现抄送和密送,上述脚本可把配置项放入配置文件,后期有时间再优化调整。

Zabbix之Python发送邮件的更多相关文章

  1. python发送邮件

    python发送邮件(无附件) ======================================================= #!/usr/bin/env python#coding ...

  2. python发送邮件及附件

    今天给大伙说说python发送邮件,官方的多余的话自己去百度好了,还有一大堆文档说实话不到万不得已的时候一般人都不会去看,回归主题: 本人是mac如果没有按照依赖模块的请按照下面的截图安装 导入模块如 ...

  3. python 发送邮件实例

    留言板回复作者邮件提醒 -----------2016-5-11 15:03:58-- source:python发送邮件实例

  4. 解读Python发送邮件

    解读Python发送邮件 Python发送邮件需要smtplib和email两个模块.也正是由于我们在实际工作中可以导入这些模块,才使得处理工作中的任务变得更加的简单.今天,就来好好学习一下使用Pyt ...

  5. python 发送邮件例子

    想到用python发送邮件 主要是服务器 有时候会产生coredump文件  ,然后因为脚本重启原因,服务器coredump产生后会重启 但是没有主动通知开发人员 想了下可以写个脚本一旦产生cored ...

  6. 利用python发送邮件

    找了很多使用python发送邮件的文章, 发现写的并不是太全, 导致坑特别多, 刚把这个坑跨过去, 在此记录下来 本代码使用163作为发送客户端, 接收邮箱随意 首先登录163邮箱, 开启POP3/S ...

  7. 用Python发送邮件

    文件:send.py # -*- coding:utf-8 -*- # ## 任兴测试用Python发送邮件 import os import sys import getopt import tim ...

  8. ETL过程跑完后,使用python发送邮件

    目标库中,如果有行数为0的表,使用python发送邮件 # -*- coding:utf-8 -*- # Author: zjc # Description:send monitor info to ...

  9. zabbix 利用python脚本实现钉钉告警

    Zabbix 利用python脚本实现钉钉告警 1.安装python3.6环境 2.创建python脚本 cd local/zabbix-4.0.3/share/zabbix/alertscripts ...

随机推荐

  1. NSOperation, NSOperationQueue 原理探析

    通过GNUstep的Foundation来尝试探索下NSOperation,NSOperationQueue 示例程序 写一个简单的程序 - (void)viewDidLoad { [super vi ...

  2. Zabbix 常见问题处理整理

    zabbix是一个基于WEB界面的提供分布式系统监视以及网络监视功能的企业级的开源解决方案. 下载: http://www.zabbix.com/download.php 帮助:https://www ...

  3. 什么是分表和分区 MySql数据库分区和分表方法

    1.为什么要分表和分区 日常开发中我们经常会遇到大表的情况,所谓的大表是指存储了百万级乃至千万级条记录的表.这样的表过于庞大,导致数据库在查询和插入的时候耗时太长,性能低下,如果涉及联合查询的情况,性 ...

  4. 使用JDBC改变Oracle的session參数 NLS_DATE_FORMAT

    近期项目除了一个问题,场景大概是这种,项目在国外开发.在项目开发过程中使用了大量的Oracle函数TO_DATE,可是开发者没有写第二个參数. 所以项目在国外的server上能够正常执行.但是在国内的 ...

  5. 迁移TFS,批量将文档导入SharePoint 2013 文档库

    一.需求分析 公司需要将存在于旧系统(TFS)所有的文档迁移至新系统(SharePoint 2013).现已经将50G以上的文档拷贝到SharePoint 2013 Server上.这些文档是一些不规 ...

  6. Java Nashorn--Part 3

    jjs 的 -Scripting 选项 jjs shell 是一个不错的方法来测试一些基本的 JavaScript,或者于不太熟悉的 JavaScript包进行交互(主要是指 javax.script ...

  7. 常用代码之四:创建jason,jason转换为字符串,字符串转换回jason,c#反序列化jason字符串的几个代码片段

    1.创建jason,并JSON.stringify()将之转换为字符串. 直接使用var customer={}, 然后直接customer.属性就可以直接赋值了. 也可以var customer = ...

  8. Winform开发框架之通用高级查询模块--SNF快速开发平台3.3-Spring.Net.Framework

    最近项目确实忙,但也是一直忙于有关项目和框架技术的事情,也一直致力于改善我的WInform开发框架.使得自己及客户使用起来更加方便,更加友好,更加高效. 在很多程序模块中都很常见,也是给客户扩展查询的 ...

  9. Vue(三):vuex是什么

    vuex官网介绍 Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式.它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化.Vuex 也集成到 Vue ...

  10. 【小超_Android】2015最流行的android组件、工具、框架大全(兴许)

    2015.07.07 FlyRefresh 创意Replace的Android实现,非常cool. fab-toolbar Material Design风格的FAB工具栏效果 MaterialVie ...