前言:继前篇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"
  说明:多个邮箱用逗号隔开,多个附件用邮件隔开。
 
  还可以实现抄送和密送,上述脚本可把配置项放入配置文件,后期有时间再优化调整。
posted on 2017-03-25 16:35  浮沉一梦  阅读(2096)  评论(0编辑  收藏  举报