import smtplib

import os

from email.mime.text import MIMEText

from email.mime.multipart import MIMEMultipart

import traceback

import time

def send(self,content=None):

'''''

发送邮件

'''

server = None

index = 1 #邮件重试

while index < 3:

index += 1

try:

server = smtplib.SMTP_SSL("smtp.exmail.qq.com",port=465)

server.login(self.user,self.passwd)

server.sendmail("" % self.user, self.to_list + self.cc_list, self.get_attach(content=content))

server.close()

print("send email successful")

break

except Exception as e:

traceback.print_exc()

time.sleep(5)

print("send email failed")

finally:

try:

if server is not None:

server.close()

except Exception as e:

traceback.print_exc()

def get_attach(self,content=None,subtype='html'):

'''''

构造邮件内容

'''

attach = MIMEMultipart()

#添加邮件内容

txt = MIMEText(content, _subtype=subtype, _charset='utf-8')

attach.attach(txt)

if self.subject is not None:

#主题,最上面的一行

attach["Subject"] = self.subject

if self.user is not None:

#显示在发件人

attach["From"] = "Data Team" % self.user

if self.to_list:

attach["To"] = ";".join(self.to_list)#收件人列表

if self.cc_list:

attach["Cc"] = ";".join(self.cc_list)#抄送列表

if self.doc:

#估计任何文件都可以用base64,比如rar等

#文件名汉字用gbk编码代替

name = os.path.basename(self.doc).encode("gbk")

f = open(self.doc,"rb")

doc = MIMEText(f.read(), "base64", "gb2312")

doc["Content-Type"] = 'application/octet-stream'

doc["Content-Disposition"] = 'attachment; filename="' + name +'"'

attach.attach(doc)

f.close()

return attach.as_string()

def get_jobs_descript(self):

"""

获取任务的执行str

:return:

"""

html =''

html += ''

html += '

'

html += ''

html += '

调度报告'

html += ''

html +=''

html +='

'

till = str(datetime.datetime.now() - self.start_time)

till = till[0:till.index(".")] #精确到秒级小数点,然后要自己弄好,

html +='

启动时间:[' + self.start_time.strftime("%Y-%m-%d %H:%M:%S") +'] 结束时间:[' + self.get_end_time_str() +'] 持续时间:'+till+'

'

ss = 0

er = 0

skip = 0

run_c = 0

pl = ''

for job_name in self.job_run_:

node = self.dag_job.get_node(job_name=job_name)

if node.status == 1:

if node.is_active == False:

skip += 1

else:

ss += 1

elif node.status == -1:

er += 1

elif node.status == 0:

run_c += 1

pl += node.get_job_mail_str()

html +="

统计 [成功:" + str(ss) +'\t错误:' + str(er)+'\t跳过:'+str(skip)+'\t未执行:' + str(self.job_size - ss - er - skip)+'] 总任务数: ' + str(self.job_size)+'

'

html +='

邮件发送时间:' + str(datetime.datetime.now().strftime('%Y-%m-%d %H:%M')) +'

'

html += '

调度报告

'

html +='

html +=''

html +='

'

html +='

状态'

html +='

任务名'

html +='

创建时间'

html +='

结束时间'

html +='

持续时间'

html +='

重试次数'

html +='

重试上限'

html +='

是否跳过'

html +='

一定正确'

html +='

优先级'

html +='

'

html +='

'

html +='

'

html += pl

html +='

'

return html

def get_job_mail_str(self):

"""

获取发送邮件的行数

:return:

"""

sz = "

"

if self.start_time is None:

sz += "

SKIP" + self.name +''

else:

if self.status == 1:

sz += "

SUCCEED" + self.name+''

elif self.status ==-1:

sz += "

ERROR" + self.name+''

elif self.status ==0:

sz += "

RUNNING" + self.name+''

elif self.status is None:

sz += "

NOT_RUN" + self.name+''

if self.start_time is not None:

sz +='

' + self.start_time.strftime('%Y-%m-%d %H:%M:%S')+''

else:

sz +='

'

if self.end_time is not None:

sz +='

'+self.end_time.strftime('%Y-%m-%d %H:%M:%S') +''

else:

sz +='

'

if self.start_time is None or self.end_time is None:

sz +='

'

else:

plz = str(self.end_time - self.start_time)

if plz.index(':') == 1:

sz += '

0' + str(self.end_time - self.start_time)[0:7] +''

else:

sz += '

' + str(self.end_time - self.start_time)[0:8] +''

sz += '

' + str(self.retry_time) + ''

sz += '

' + str(self.retry_limit) + ''

if self.is_active:

sz +='

'

else:

sz += '

' + str(self.is_active == False) +''

if self.forver_right:

sz += '

' + str(self.forver_right == True) +''

else:

sz += '

'

sz += '

' + str(self.priority) +''

sz += ''

return sz

python的email模块_python email 模块相关推荐

  1. python log模块_Python日志模块-logging

    一.logging模块 日志的作用可以简单总结为以下3点: 1.程序调试 2.了解软件程序运行情况,是否正常 3.软件程序运行故障分析与问题定位 1.日志的等级 不同的应用程序所定义的日志等级可能会有 ...

  2. python正则表达式模块_Python常用模块——正则表达式re模块

    Python常用模块--正则表达式re模块 引子 请从以下文件里取出所有的手机号 姓名 地区 身高 体重 电话 况咏蜜 北京 171 48 13651054608 王心颜 上海 169 46 1381 ...

  3. python邮件模块_python 邮件模块

    Python内置对SMTP的支持,其中细化为smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件,我们仅仅需要编辑相关配置即可 1. 获取认证 在获取认证这一块我们需 ...

  4. python smtplib模块_Python smtplib模块详解:发送邮件

    使用 Python 的 smtplib 模块来发送邮件非常简单,大部分底层的处理都由 smtplib 进行了封装,开发者只需要按照如下 3 步来发送邮件即可: 连接 SMTP 服务器,并使用用户名.密 ...

  5. python argparse模块_Python argparse模块应用实例解析

    这篇文章主要介绍了Python argparse模块应用实例解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 简介 argparse是python ...

  6. python如何自定义模块_python自定义模块和开源模块使用方法

    模块,用一砣代码实现了某个功能的代码集合. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代码的重用性和代码间的耦合.而对于一个复杂的功能来,可能需要多个函数才 ...

  7. python 自定义模块_Python 自定义模块路径

    问题: 假设我们自己写了一个名为 log_config.py 的日志记录程序模块.此模块会被其他程序所引用,如下例子. import log_config logger = log_config.lo ...

  8. python解析html模块_Python HTMLParser模块解析html获取url实例

    HTMLParser是python用来解析html的模块.它可以分析出html里面的标签.数据等等,是一种处理html的简便途径.HTMLParser采用的是一种事件驱动的模式,当HTMLParser ...

  9. python shelve模块_python常用模块之shelve模块

    python常用模块之shelve模块 shelve模块是一个简单的k,v将内存中的数据通过文件持久化的模块,可以持久化任何pickle可支持的python数据类型 我们在上面讲json.pickle ...

  10. python常用运维模块_python常用模块之一

    sys模块: sys模块是提供关于python本身的详细内在的信息的模块. sys.executable变量,它包含python解释器的路径 sys.platform变量,告诉我们现在处于什么操作系统 ...

最新文章

  1. 200行代码,一行行教你自制微信机器人
  2. UltraEdit不高亮解决办法
  3. [待总结]高频率vim命令
  4. 五相同步电机matlab模型,五相永磁同步电机空间矢量PWM控制系统MATLAB仿真
  5. 191202-GETJOB-捡历的写法
  6. 软工第二次结对作业---部门录取方案实现
  7. (转)淘淘商城系列——使用maven构建工程
  8. java---同步与并发概念
  9. 如何获取查询生成器以字符串形式输出其原始SQL查询?
  10. C语言正则表达式详解 regcomp() regexec() regfree()详解
  11. 机器学习Sklearn Day1
  12. Best Time to Buy and Sell Stock II(leetcode)
  13. dci odbc mysql_人大金仓-
  14. 年轻人逃离算法?更懂你的时尚推荐算法,你会拒绝吗?| FashionHack 专栏
  15. php 判断时间是星期几,通过PHP的date()函数判断今天是星期几
  16. (java中的super)不会飞还能叫Superman吗
  17. 强大的全文本搜索工具——AnyTXT Searcher
  18. 2019年个税计算excel模板
  19. C/C++数据结构课程设计安排
  20. matlab的讲稿ppt,Matlab初步(讲稿200508)之一_Matlab讲解_doc_大学课件预览_高等教育资讯网...

热门文章

  1. 日志模块-logging模块
  2. C和指针 第四章 习题
  3. POJ 3928 amp; HDU 2492 Ping pong(树阵评价倒数)
  4. ReaderMe 1.0.0.32版发布
  5. JS_01JavaScript基础笔记
  6. 操作系统——文件基本概念
  7. 算法竞赛入门经典 例题6-2 铁轨(C、python)
  8. Leetcode--191. 位1的个数
  9. Python爬虫用Selenium抓取js生成的文件(一)
  10. python assert 与 slice