標籤:zabbix python 指令碼 郵件 linux
之前儲存了一個zabbix的郵件指令碼,這次在使用中遇到了一些問題,這裡合大家分享一下。
#!/usr/bin/env python#-*- coding: UTF-8 -*-import smtplibimport sysfrom email.mime.text import MIMETextfrom email.header import Headerdef send_mail(to_email,subject,message): sender = '[email protected]' receiver = to_email subject = 'python email test' smtpserver = 'smtp.163.com' username = 'xxxxx' password = 'xxxxx' msg = MIMEText(message, 'plain', 'utf-8') msg['Subject'] = subject msg['from'] = sender msg['to'] = receiver smtp = smtplib.SMTP() smtp.connect(smtpserver) smtp.login(username, password) smtp.sendmail(sender, to_email, msg.as_string()) smtp.quit()if __name__ == '__main__': send_mail(sys.argv[1],sys.argv[2],sys.argv[3])
當程式運行到 smtp.connect(smtpserver) 的時候,就卡住了,在本地Windows PC上使用pycharm執行就沒有問題
當時在網上找了各種資料,什麼加連接埠,ping smtp,dig smtp的,都不好使,最後又被我發現了一個指令碼,使用了其他的方法,不在使用 smtp.connect
指令碼如下:指令碼使在菜鳥教程中找到的
#!/usr/bin/python# -*- coding: UTF-8 -*- import smtplibfrom email.mime.text import MIMETextfrom email.utils import formataddr my_sender='[email protected]' # 寄件者郵箱帳號my_pass = 'xxxxxxxxxx' # 寄件者郵箱密碼my_user='[email protected]' # 收件者郵箱帳號,我這邊發送給自己def mail(): ret=True try: msg=MIMEText('填寫郵件內容','plain','utf-8') msg['From']=formataddr(["FromRunoob",my_sender]) # 括弧裡的對應寄件者郵箱暱稱、寄件者郵箱帳號 msg['To']=formataddr(["FK",my_user]) # 括弧裡的對應收件者郵箱暱稱、收件者郵箱帳號 msg['Subject']="菜鳥教程發送郵件測試" # 郵件的主題,也可以說是標題 server=smtplib.SMTP_SSL("smtp.qq.com", 465) # 寄件者郵箱中的SMTP伺服器,連接埠是25 server.login(my_sender, my_pass) # 括弧中對應的是寄件者郵箱帳號、郵箱密碼 server.sendmail(my_sender,[my_user,],msg.as_string()) # 括弧中對應的是寄件者郵箱帳號、收件者郵箱帳號、發送郵件 server.quit() # 關閉串連 except Exception: # 如果 try 中的語句沒有執行,則會執行下面的 ret=False ret=False return ret ret=mail()if ret: print("郵件發送成功")else: print("郵件發送失敗")
裡面調用的是 server=smtplib.SMTP_SSL 經過我測試,只要網路波動不是很大,基本郵件都可以發送成功
下面是我更改後的,zabbix調用的指令碼:
#!/usr/bin/env python#_*_ coding:utf-8 _*_import smtplib, sysfrom email.mime.text import MIMETextfrom email.utils import formataddrdef send_mail(to_email, subject, message): #郵箱地址和郵箱密碼 my_sender = '[email protected]' my_pass = 'xxxxx' my_user = to_email #發送郵件的資訊主體,寄件者,收件者,內容 msg = MIMEText(message, 'plain', 'utf-8') msg['From'] = formataddr(["Zabbix", my_sender]) msg['To'] = formataddr(["Ops", my_user]) msg['Subject'] = subject #發送郵件 server = smtplib.SMTP_SSL("smtp.gmail.com", 465) server.login(my_sender, my_pass) server.sendmail(my_sender, [my_user, ], msg.as_string()) server.quit()if __name__ == '__main__': send_mail(sys.argv[1],sys.argv[2],sys.argv[3])
zabbix郵件警示python指令碼