最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

利用python實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送客戶(hù)端示例

 更新時(shí)間:2017年12月23日 22:23:27   投稿:jingxian  
下面小編就為大家分享一篇利用python實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送客戶(hù)端示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧

腳本過(guò)于簡(jiǎn)單,供學(xué)習(xí)和參考。主要了解一下smtplib庫(kù)的使用和超時(shí)機(jī)制的實(shí)現(xiàn)。使用signal.alarm實(shí)現(xiàn)超時(shí)機(jī)制。

#!/usr/bin/env python
# -*- coding: utf-8 -*-
import time
import sys
import logging
import smtplib
import socket 
import signal
import ConfigParser
from datetime import datetime
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr

CONF_PATH = "/etc/zabbix/alarm_email.conf"
logging.basicConfig(level=logging.INFO,
          format='%(asctime)s [%(levelname)s]: %(message)s',
          filename='/var/log/zabbix/send_alarm_email.log')
class EmailObject:
  def __init__(self,to_addr,content):
    self.timeout = 10
    self.retry = 3
    self.cp = self._parse_config()
    self.cpl = self._parse_config().sections()
    self.conf = dict(self.cp.items(self.cpl[0])) 
    # common how to use one
    self.to_addr = to_addr
    self.content = content
  # get ConfigParser,for section selection
  def _parse_config(self):
    cp = ConfigParser.ConfigParser()
    cp.read(CONF_PATH)
    return cp
  # set base config
  def _conf_parse(self):
    self.subject = "zabbix告警"
    self.from_addr = self.conf["from_addr"]
    self.password = self.conf["password"]
    self.smtp_server = self.conf["smtp_server"]
  def _msg_parse(self):
    #msg = self.content.split("*")
    #state = "alarm" if msg[0] == "PROBLEM" else "ok"
    #severity = msg[1]
    #head_time = map(int,msg[2].split("."))
    #tail_time = map(int,msg[3].split(":"))
    ## if not host?
    #event_type = "host." + msg[4]
    #reason = msg[5].replace("_"," ")
    #alarm_id = int(msg[6])
    #message = msg
    return self.content
  def _change_server(self):
    # if len = 1 and this fun is called,means that all servers hava been tried
    if(len(self.cpl) > 1):
      self.cpl.pop(0)
      self.retry = 3
      self.conf = dict(self.cp.items(self.cpl[0]))
      logging.info("Change server to {}".format(self.cpl[0]))
      self.send_email()
    else:
      logging.warning("No server could be used,try to config more server(now is {}) or increase the timeout [{}]!".format(self.cp.sections(),self.timeout))
      exit()
 
  def send_email(self):
    # signal handle  
    def handler(signum,frame):
      if self.retry > 0:
        raise AssertionError
      else:
        self._change_server()
    self._conf_parse()
    from_addr = self.from_addr 
    password = self.password
    smtp_server = self.smtp_server
    timeout = self.timeout
    to_addr = self.to_addr
    msg = MIMEText(self.content,'plain','utf-8')
    msg['Subject'] = Header(self.subject, 'utf-8')
    msg['From'] = 'AlarmEmail'+'<'+from_addr+'>'  
    msg['To'] = "******@******.com"
    
    try:
      signal.signal(signal.SIGALRM,handler)
      signal.alarm(timeout)
      server = smtplib.SMTP_SSL(smtp_server,465)
      server.login(from_addr, password)
      server.sendmail(from_addr,to_addr, msg.as_string())
      logging.info("Send email successfully!From:[{}],To:[{}],Content:[{}]".format(from_addr,to_addr,self.content))
      server.quit()
      exit()
    except AssertionError:
      self.retry -= 1
      logging.info("Begin to resend email for the {}th times".format(3-self.retry))
      self.send_email()
    except smtplib.SMTPAuthenticationError,e:
      logging.error("Server [{}] authentication failed".format(smtp_server))
      self._change_server()
'''
example:
from emailtest import emailtest

eb = emailtest.EmailObject("******@******.com","test content")
eb.send_email()
tips:
increase timeout:
  eb.timeout = 10
increase retry times:
  eb.retry = 5
'''

配置文件參考如下:

[default]
from_addr = ******@******.com
password = ******
smtp_server = smtp.******.com
[163]
from_addr = ******@163.com
password = ******
smtp_server = smtp.163.com
[qq]
from_addr = ******@qq.com
password = ******
smtp_server = smtp.qq.com

以上這篇利用python實(shí)現(xiàn)簡(jiǎn)單的郵件發(fā)送客戶(hù)端示例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python獲取指定字符前面的所有字符方法

    Python獲取指定字符前面的所有字符方法

    下面小編就為大家分享一篇Python獲取指定字符前面的所有字符方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-05-05
  • python單例模式獲取IP代理的方法詳解

    python單例模式獲取IP代理的方法詳解

    在使用python對(duì)網(wǎng)頁(yè)進(jìn)程訪問(wèn)時(shí),以防被禁止,可用使用代理IP的方法減少被禁的可能,下面這篇文章主要給大家介紹了關(guān)于python單例模式獲取IP代理的相關(guān)資料,需要的朋友可以參考借鑒,下面來(lái)一起看看吧
    2018-09-09
  • python分割文件的常用方法

    python分割文件的常用方法

    這篇文章主要介紹了python分割文件的常用方法,包括指定分割大小、按行分割與分割合并等技巧,非常實(shí)用,需要的朋友可以參考下
    2014-11-11
  • python實(shí)現(xiàn)二分查找算法

    python實(shí)現(xiàn)二分查找算法

    這篇文章主要介紹了python如何實(shí)現(xiàn)二分查找算法,幫助大家更好的理解和使用python,感興趣的朋友可以了解下。
    2020-09-09
  • pycharm運(yùn)行程序時(shí)在Python console窗口中運(yùn)行的方法

    pycharm運(yùn)行程序時(shí)在Python console窗口中運(yùn)行的方法

    今天小編就為大家分享一篇pycharm運(yùn)行程序時(shí)在Python console窗口中運(yùn)行的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-12-12
  • Django REST framework 如何實(shí)現(xiàn)內(nèi)置訪問(wèn)頻率控制

    Django REST framework 如何實(shí)現(xiàn)內(nèi)置訪問(wèn)頻率控制

    這篇文章主要介紹了Django REST framework 內(nèi)置訪問(wèn)頻率控制,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-07-07
  • django遷移文件migrations的實(shí)現(xiàn)

    django遷移文件migrations的實(shí)現(xiàn)

    這篇文章主要介紹了django遷移文件migrations的實(shí)現(xiàn),具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2020-03-03
  • 對(duì)python中類(lèi)的繼承與方法重寫(xiě)介紹

    對(duì)python中類(lèi)的繼承與方法重寫(xiě)介紹

    今天小編就為大家分享一篇對(duì)python中類(lèi)的繼承與方法重寫(xiě)介紹,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2019-01-01
  • Python的進(jìn)制轉(zhuǎn)換和ASCLL轉(zhuǎn)換你了解嗎

    Python的進(jìn)制轉(zhuǎn)換和ASCLL轉(zhuǎn)換你了解嗎

    這篇文章主要為大家詳細(xì)介紹了Python的進(jìn)制轉(zhuǎn)換和ASCLL轉(zhuǎn)換,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • python中的super如何使用

    python中的super如何使用

    這篇文章主要介紹了python中的super,python中的super,名為超類(lèi),可以簡(jiǎn)單的理解為執(zhí)行父類(lèi)的__init__函數(shù),本文就著重看下super的具體作用,需要的朋友可以參考下
    2022-03-03

最新評(píng)論

天柱县| 乐平市| 虎林市| 辽宁省| 库伦旗| 重庆市| 天长市| 波密县| 海门市| 商洛市| 囊谦县| 安丘市| 冀州市| 桐城市| 清涧县| 班玛县| 光泽县| 龙海市| 乳山市| 日喀则市| 东宁县| 泰和县| 乐都县| 象山县| 邵武市| 灵丘县| 东乡| 新兴县| 永平县| 仁化县| 保山市| 南澳县| 松江区| 奉新县| 九龙城区| 九江县| 基隆市| 新田县| 丹江口市| 曲靖市| 将乐县|