脚本过于简单,供学习和参考。主要了解一下smtplib库的使用和超时机制的实现。使用signal.alarm实现超时机制。

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

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实现简单的邮件发送客户端示例就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

利用python发送邮件_利用python实现简单的邮件发送客户端示例相关推荐

  1. python实现邮件客户端_利用python实现简单的邮件发送客户端示例

    脚本过于简单,供学习和参考.主要了解一下smtplib库的使用和超时机制的实现.使用signal.alarm实现超时机制. #!/usr/bin/env python # -*- coding: ut ...

  2. python 发送邮件_利用Python 发送邮件

    原标题:利用Python 发送邮件 概要 我们都知道SMTP(简单邮件传输协议),是一组用于从原地址到目的地址传输邮件的规范,通过它来控制邮件的中转方式.SMTP规定电子邮件应该如何格式化.如何加密, ...

  3. 第一章 第一节:Python基础_认识Python

    Python基础入门(全套保姆级教程) 第一章 第一节:Python基础_认识Python 1. 什么是编程 通俗易懂,编程就是用代码编写程序,编写程序有很多种办法,像c语言,javaPython语言 ...

  4. 第四周作业 简单地邮件发送实现

    先说发送邮箱用到的三大类: 创建和解析邮件内容的API :Message类是创建和解析邮件的核心API,它的实例对象代表一封电子邮件. 发送邮件的API:Transport类是发送邮件的核心API类, ...

  5. excel python插件_利用 Python 插件 xlwings 读写 Excel

    Python 通过 xlwings 读取 Excel 数据 去年底公司让我做设备管理,多次委婉拒绝,最终还是做了.其实我比较喜欢技术.做管理后发现现场没有停机率统计,而原始数据有,每次要自己在Exce ...

  6. 动态照片墙 python 实现_利用python生成照片墙的示例代码

    这篇文章主要介绍了利用python生成照片墙的示例代码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧 PIL(Python Im ...

  7. 如何用python赚钱_利用python能怎么挣钱

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! 6年python,期间写了各种奇葩爬虫,挣各种奇葩的钱,写这篇文章总结下几种爬虫 ...

  8. ppt python 图表_利用python分析weibo数据做成图表放入PPT中

    起因 很久以前,就有个想法,就是自动分析微博的数据,但是之前一直想的是网页版展示,flask想学了好久都没学,偶然的一次看到了一篇关于python处理pptx的文章,再加上同窗三年的室友在毕业后竟然主 ...

  9. 动态照片墙 python 实现_使用Python生成照片墙,利用,python

    PIL(Python Image Library)是python的第三方图像处理库,但是由于其强大的功能与众多的使用人数,几乎已经被认为是python官方图像处理库了.其官方主页为: PIL . PI ...

最新文章

  1. [转载]中国工商银行软件开发部门职业发展
  2. 退出MFC应用程序的方法集
  3. vim 寄存器中的 ^@,^M,^J
  4. codefroces204A - Little Elephant and Interval 数位DP
  5. Google 出品的 Java 编码规范和编程指南,权威又科学,强烈推荐
  6. 2022年中国游戏行业投融资发展报告
  7. CNZZ、51啦、量子恒道、谷歌网站流量统计比较
  8. 服务器cpu开启虚拟化的好处,开启硬件虚拟化有什么好处和坏处?
  9. 会议纪要模板----邮件
  10. SMM框架简单用户增删改查
  11. springboot项目linux系统设置开机启动项(亲测可用)
  12. 新建一个html代码页面,三分钟教你创建一个简单的网页
  13. 玩客云当打印机服务器,再玩一次机,我把玩客云改造成了群控系统!
  14. html5统计鼠标点击的次数,怎么实现js统计鼠标点击次数
  15. VS Code 2022路线图:大量Spring Boot优化提上日程
  16. 正则表达式 (.*?)
  17. 第十一篇:读《文明,现代化,价值投资与中国》
  18. vue 卡片轮播 中间大两边小 复制代码就可使用
  19. 快手伪原创视频热门 为何要修改视频md5值
  20. 武汉旅游地图(zz)

热门文章

  1. 2020年全国压岁钱榜单出炉,今年小朋友压岁钱归谁?
  2. “双创指数”引行业拼抢,基民的“机会”又双叒叕来了?
  3. 新华社报道关注松果出行:助力国家碳达峰碳中和目标
  4. java万法_Java内省机制和 BeanUtils实现
  5. 计算机网络系统结构分析 pdf,计算机网络(实验三:数据包结构分析).pdf
  6. 医院病案档案管理系统php_医疗产品经理必懂:医院业务流程及系统
  7. 吞吐量达到瓶颈后下降_中港协:八大枢纽港集装箱吞吐量增速创新高
  8. 计算机一级c基础知识,计算机一级考试MSOffice基础试题
  9. Java oracle查询语句无法赋值给_java.sql.SQLException: 无法转换为内部表示 -〉java 查询oracle数据库返回错误信息...
  10. Python中包含义及其定义