获取阿里云和金山云云存储的方法在前两章文章里面已经有说过,那么现在就可以搭配一个邮件脚本,然后每天定时发送了。
假设我们的这个发送邮件脚本叫sendmail.py,由于我们这个邮件脚本是包含整个的html文件,所以我们这个sendmail.py需要获得阿里云OSS脚本的结果,然后把这个脚本结果传递给html。
整个脚本如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
|
#!/usr/bin/env python # -*- coding: UTF-8 -*- #Author:ChrisChan@2017-09-27 #这个脚本用于获取阿里云和金山云云存储的值,并发送邮件,python版本必须是2.7+ import os,time,re,smtplib,logging
from email.mime.text import MIMEText
from email.header import Header
from aliyunsdkcore import client
from aliyunsdkcms.request.v20170301 import QueryMetricListRequest
import getalioss #这个是获取阿里云oss的脚本,叫getalioss.py
from getalioss import getlists
oss_today_capacity,oss_yesterday_capacity,oss_diff = getlists()
color = 'green' if oss_diff[ 0 ] < '0' else 'red'
color1 = 'green' if oss_diff[ 1 ] < '0' else 'red'
color2 = 'green' if oss_diff[ 2 ] < '0' else 'red'
color3 = 'green' if oss_diff[ 3 ] < '0' else 'red'
color4 = 'green' if oss_diff[ 4 ] < '0' else 'red'
color5 = 'green' if oss_diff[ 5 ] < '0' else 'red'
def send_mail(to_list, cc_list, html, sub):
me = mail_user
msg = MIMEText(html, _subtype = 'html' , _charset = 'utf-8' ) # 格式化邮件内容为html,编码为utf-8
msg[ 'Subject' ] = sub # 邮件主题
msg[ 'From' ] = me # 发件人
msg[ 'To' ] = ";" .join(to_list) # 收件人,将列表转换为字符串
msg[ 'Cc' ] = ";" .join(cc_list) # 抄送人,将列表转换为字符串
try :
send_smtp = smtplib.SMTP() # 实例化
send_smtp.connect(mail_host) # 连接smtp服务器
send_smtp.login(mail_user, mail_pass) # 使用定义的账号密码进行登录
send_smtp.sendmail(me, to_list + cc_list, msg.as_string()) # 发送邮件
send_smtp.close() # 关闭连接
return True
except Exception, e:
# logging.debug(e)
print ( "ERROR!!!!" )
return False
if __name__ = = '__main__' :
mail_host = 'mail.dahuatech.com' #这里填写发信的服务器地址
mail_user = 'dh_software007@dahuatech.com' #这里填写发信人
mail_pass = '发送邮件的密码'
mailto_list = [ 'chenx1242@163.com' ] #这里填写收信人
mailcc_list = [ '124208739@qq.com' , 'chen_shuo@dahuatech.com' ] #这里是抄送
html = """
<table color="CCCC33" width="800" border="1" cellspacing="0" cellpadding="5" text-align="center">
<tr>
<B><td text-align="center">云厂家</td></B>
<B><td text-align="center">Bucket名称</td></B>
<B><td text-align="center">保存内容</td></B>
<B><td text-align="center">今日容量大小</td></B>
<B><td text-align="center">昨日容量大小</td></B>
<B><td text-align="center">两日容量差</td></B>
</tr>
<tr>
<td text-align="center" rowspan="3">阿里云杭州一区</td>
<td text-align="center">lechangecloud</td>
<td text-align="center">云录像(含录像封面)、报警图片、全景图片
合成(原始+合成后图片)</td> <td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center" style="color: %s">%s GB</td>
</tr>
<tr>
<td text-align="center">lechangecloud-public</td>
<td text-align="center">录像分享文件</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center" style="color: %s">%s GB</td>
</tr>
<tr>
<td text-align="center">lechangehls</td>
<td text-align="center">视频直播文件</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center" style="color: %s">%s GB</td>
</tr>
<tr>
<td text-align="center" rowspan="2">阿里云深圳一区</td>
<td text-align="center">online-sz-private</td>
<td text-align="center">云录像(含录像封面)、报警图片、全景图片
合成(原始+合成后图片)</td> <td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center" style="color: %s">%s GB</td>
</tr>
<tr>
<td text-align="center">online-sz-public</td>
<td text-align="center">录像分享文件</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center" style="color: %s">%s GB</td>
</tr>
<tr>
<td text-align="center">阿里云杭州二区</td>
<td text-align="center">录像分享文件</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center" style="color: %s">%s GB</td>
</tr>
<tr>
<td text-align="center" rowspan="3">金山云</td>
<td text-align="center">js-online-private</td>
<td text-align="center">云录像(含录像封面)</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
</tr>
<tr>
<td text-align="center">js-online-public</td>
<td text-align="center">录像分享文件</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
</tr>
<tr>
<td text-align="center">js-online-hls</td>
<td text-align="center">视频直播文件</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
<td text-align="center">%s GB</td>
</tr>
<tr>
<td test-align="center" colspan="6">注意事项 1:阿里云的云存储延>迟大约2~3小时,金山云的云存储延迟为一天;<br />
注意事项 3:此邮件是系统自动发出,如果有任何疑问请找陈硕; </tr>
</table>""" % (oss_today_capacity[ 0 ],oss_yesterday_capacity[ 0 ],color,oss_diff[ 0 ],oss_today_capacity[ 1 ],oss_yesterday_capacity[ 1 ],color1,oss_diff[ 1 ],oss_today_capacity[ 2 ],oss_yesterday_capacity[ 2 ],color2,oss_diff[ 2 ],oss_today_capacity[ 3 ],oss_yesterday_capacity[ 3 ],color3,oss_diff[ 3 ],oss_today_capacity[ 4 ],oss_yesterday_capacity[ 4 ],color4,oss_diff[ 4 ],oss_today_capacity[ 5 ],oss_yesterday_capacity[ 5 ],color5,oss_diff[ 5 ], '9.27' , '9.26' , '0.01' , '381.71' , '381.71' , '0.0' , '14.9' , '14.9' , '0.0' ) #这里对应上面%s
sub = "乐橙云存储资源空间情况每日汇报表" #这里是标题
if send_mail(mailto_list, mailcc_list, html, sub):
logging.debug( "Send mail succed!" )
else :
logging.debug( "Send mail failed" )
|
这里我金山云没有用脚本获取值,而是手动输入一些值作例子,整个脚本效果如下:
可以看到,在“差值”那一栏,正数是红色,负数是绿色。
新的知识点!
1)上面那个脚本涉及到了B.py获取A.py的变量的问题,在这里我举个例子方便理解:
假设A.py是这样的:
1
2
3
4
5
6
7
|
#!/usr/bin/env python # -*- coding: UTF-8 -*- a = 1
b = "lebron james"
c = "Yao Ming"
def f():
return "function"
|
B.py需要得到A.py的变量和函数,那么B.py可以这么写:
1
2
3
4
5
6
7
8
9
|
#!/usr/bin/env python # -*- coding: UTF-8 -*- import A #如果A.py跟B.py不在一个文件夹下,这里需要写绝对路径
a = a.a
print (a)
from a import b,c,f
print (b)
print (b) + (c)
f() |
执行一下B.py,看一下效果:
2)接着上面的例子说,最好是A.py生成一个结果,然后传给B,而不是把生成结果的事交给B去办,因为变量太复杂(比如涉及到for in 循环),那么在from import那步就很容易出错,所以说“模块化中的单元是类、函数和常量,而不是变量”。
比如A.py中涉及了一个for in循环,那么可以将得到的lists写进一个函数getlists()里,然后在B.py里写 lists=getlists()。
最后的最后,如果您觉得本文对您升职加薪有帮助,那么请不吝赞助之手,刷一下下面的二维码,赞助本人继续写更多的博文!
本文转自 苏幕遮618 51CTO博客,原文链接:http://blog.51cto.com/chenx1242/1969705