天天看點

可以發送html文本的python腳本

擷取阿裡雲和金山雲雲存儲的方法在前兩章文章裡面已經有說過,那麼現在就可以搭配一個郵件腳本,然後每天定時發送了。

假設我們的這個發送郵件腳本叫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

<code>#!/usr/bin/env python</code>

<code># -*- coding: UTF-8 -*-</code>

<code>#Author:ChrisChan@2017-09-27</code>

<code>#這個腳本用于擷取阿裡雲和金山雲雲存儲的值,并發送郵件,python版本必須是2.7+</code>

<code>import</code> <code>os,time,re,smtplib,logging</code>

<code>from</code> <code>email.mime.text </code><code>import</code> <code>MIMEText</code>

<code>from</code> <code>email.header </code><code>import</code> <code>Header</code>

<code>from</code> <code>aliyunsdkcore </code><code>import</code> <code>client</code>

<code>from</code> <code>aliyunsdkcms.request.v20170301 </code><code>import</code> <code>QueryMetricListRequest</code>

<code>import</code> <code>getalioss    </code><code>#這個是擷取阿裡雲oss的腳本,叫getalioss.py</code>

<code>from</code> <code>getalioss </code><code>import</code> <code>getlists</code>

<code>oss_today_capacity,oss_yesterday_capacity,oss_diff </code><code>=</code> <code>getlists()</code>

<code>color </code><code>=</code> <code>'green'</code> <code>if</code> <code>oss_diff[</code><code>0</code><code>] &lt; </code><code>'0'</code> <code>else</code> <code>'red'</code>

<code>color1 </code><code>=</code> <code>'green'</code> <code>if</code> <code>oss_diff[</code><code>1</code><code>] &lt; </code><code>'0'</code> <code>else</code> <code>'red'</code>

<code>color2 </code><code>=</code> <code>'green'</code> <code>if</code> <code>oss_diff[</code><code>2</code><code>] &lt; </code><code>'0'</code> <code>else</code> <code>'red'</code>

<code>color3 </code><code>=</code> <code>'green'</code> <code>if</code> <code>oss_diff[</code><code>3</code><code>] &lt; </code><code>'0'</code> <code>else</code> <code>'red'</code>

<code>color4 </code><code>=</code> <code>'green'</code> <code>if</code> <code>oss_diff[</code><code>4</code><code>] &lt; </code><code>'0'</code> <code>else</code> <code>'red'</code>

<code>color5 </code><code>=</code> <code>'green'</code> <code>if</code> <code>oss_diff[</code><code>5</code><code>] &lt; </code><code>'0'</code> <code>else</code> <code>'red'</code>

<code>def</code> <code>send_mail(to_list, cc_list, html, sub):</code>

<code>    </code><code>me </code><code>=</code> <code>mail_user</code>

<code>    </code><code>msg </code><code>=</code> <code>MIMEText(html, _subtype</code><code>=</code><code>'html'</code><code>, _charset</code><code>=</code><code>'utf-8'</code><code>)  </code><code># 格式化郵件内容為html,編碼為utf-8</code>

<code>    </code><code>msg[</code><code>'Subject'</code><code>] </code><code>=</code> <code>sub    </code><code># 郵件主題</code>

<code>    </code><code>msg[</code><code>'From'</code><code>] </code><code>=</code> <code>me    </code><code># 發件人</code>

<code>    </code><code>msg[</code><code>'To'</code><code>] </code><code>=</code> <code>";"</code><code>.join(to_list)  </code><code># 收件人,将清單轉換為字元串</code>

<code>    </code><code>msg[</code><code>'Cc'</code><code>] </code><code>=</code> <code>";"</code><code>.join(cc_list)  </code><code># 抄送人,将清單轉換為字元串</code>

<code>    </code><code>try</code><code>:</code>

<code>        </code><code>send_smtp </code><code>=</code> <code>smtplib.SMTP()    </code><code># 執行個體化</code>

<code>        </code><code>send_smtp.connect(mail_host)    </code><code># 連接配接smtp伺服器</code>

<code>        </code><code>send_smtp.login(mail_user, mail_pass)    </code><code># 使用定義的賬号密碼進行登入</code>

<code>        </code><code>send_smtp.sendmail(me, to_list</code><code>+</code><code>cc_list, msg.as_string())    </code><code># 發送郵件</code>

<code>        </code><code>send_smtp.close()    </code><code># 關閉連接配接</code>

<code>        </code><code>return</code> <code>True</code>

<code>    </code><code>except</code> <code>Exception, e:</code>

<code>        </code><code># logging.debug(e)</code>

<code>        </code><code>print</code> <code>(</code><code>"ERROR!!!!"</code><code>)</code>

<code>        </code><code>return</code> <code>False</code>

<code>if</code> <code>__name__ </code><code>=</code><code>=</code> <code>'__main__'</code><code>:</code>

<code>    </code><code>mail_host </code><code>=</code> <code>'mail.dahuatech.com'</code>    <code>#這裡填寫發信的伺服器位址</code>

<code>    </code><code>mail_user </code><code>=</code> <code>'[email protected]'</code>    <code>#這裡填寫發信人</code>

<code>    </code><code>mail_pass </code><code>=</code> <code>'發送郵件的密碼'</code>

<code>    </code><code>mailto_list </code><code>=</code> <code>[</code><code>'[email protected]'</code><code>]    </code><code>#這裡填寫收信人</code>

<code>    </code><code>mailcc_list </code><code>=</code> <code>[</code><code>'[email protected]'</code><code>,</code><code>'[email protected]'</code><code>]    </code><code>#這裡是抄送</code>

<code>    </code><code>html </code><code>=</code> <code>"""</code>

<code>                </code><code>&lt;table color="CCCC33" width="800" border="1" cellspacing="0" cellpadding="5" text-align="center"&gt;</code>

<code>                        </code><code>&lt;tr&gt;</code>

<code>                                </code><code>&lt;B&gt;&lt;td text-align="center"&gt;雲廠家&lt;/td&gt;&lt;/B&gt;</code>

<code>                                </code><code>&lt;B&gt;&lt;td text-align="center"&gt;Bucket名稱&lt;/td&gt;&lt;/B&gt;</code>

<code>                                </code><code>&lt;B&gt;&lt;td text-align="center"&gt;儲存内容&lt;/td&gt;&lt;/B&gt;</code>

<code>                                </code><code>&lt;B&gt;&lt;td text-align="center"&gt;今日容量大小&lt;/td&gt;&lt;/B&gt;</code>

<code>                                </code><code>&lt;B&gt;&lt;td text-align="center"&gt;昨日容量大小&lt;/td&gt;&lt;/B&gt;</code>

<code>                                </code><code>&lt;B&gt;&lt;td text-align="center"&gt;兩日容量差&lt;/td&gt;&lt;/B&gt;</code>

<code>                        </code><code>&lt;/tr&gt;   </code>

<code>                        </code><code>&lt;tr&gt;   </code>

<code>                                </code><code>&lt;td text-align="center" rowspan="3"&gt;阿裡雲杭州一區&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;lechangecloud&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;雲錄像(含錄像封面)、報警圖檔、全景圖檔</code>

<code>合成(原始+合成後圖檔)&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;%s GB&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center" style="color: %s"&gt;%s GB&lt;/td&gt;</code>

<code>                        </code><code>&lt;/tr&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;lechangecloud-public&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;錄像分享檔案&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;lechangehls&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;視訊直播檔案&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center" rowspan="2"&gt;阿裡雲深圳一區&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;online-sz-private&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;online-sz-public&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;阿裡雲杭州二區&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center" rowspan="3"&gt;金山雲&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;js-online-private&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;雲錄像(含錄像封面)&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;js-online-public&lt;/td&gt;</code>

<code>                                </code><code>&lt;td text-align="center"&gt;js-online-hls&lt;/td&gt;</code>

<code>                                </code><code>&lt;td test-align="center" colspan="6"&gt;注意事項 1:阿裡雲的雲存儲延&gt;遲大約2~3小時,金山雲的雲存儲延遲為一天;&lt;br /&gt;</code>

<code>注意事項 3:此郵件是系統自動發出,如果有任何疑問請找陳碩;</code>

<code>                </code><code>&lt;/table&gt;"""</code> <code>%</code> <code>(oss_today_capacity[</code><code>0</code><code>],oss_yesterday_capacity[</code><code>0</code><code>],color,oss_diff[</code><code>0</code><code>],oss_today_capacity[</code><code>1</code><code>],oss_yesterday_capacity[</code><code>1</code><code>],color1,oss_diff[</code><code>1</code><code>],oss_today_capacity[</code><code>2</code><code>],oss_yesterday_capacity[</code><code>2</code><code>],color2,oss_diff[</code><code>2</code><code>],oss_today_capacity[</code><code>3</code><code>],oss_yesterday_capacity[</code><code>3</code><code>],color3,oss_diff[</code><code>3</code><code>],oss_today_capacity[</code><code>4</code><code>],oss_yesterday_capacity[</code><code>4</code><code>],color4,oss_diff[</code><code>4</code><code>],oss_today_capacity[</code><code>5</code><code>],oss_yesterday_capacity[</code><code>5</code><code>],color5,oss_diff[</code><code>5</code><code>],</code><code>'9.27'</code><code>,</code><code>'9.26'</code><code>,</code><code>'0.01'</code><code>,</code><code>'381.71'</code><code>,</code><code>'381.71'</code><code>,</code><code>'0.0'</code><code>,</code><code>'14.9'</code><code>,</code><code>'14.9'</code><code>,</code><code>'0.0'</code><code>)    </code><code>#這裡對應上面%s</code>

<code>    </code><code>sub </code><code>=</code> <code>"樂橙雲存儲資源空間情況每日彙報表"</code>    <code>#這裡是标題</code>

<code>    </code><code>if</code> <code>send_mail(mailto_list, mailcc_list, html, sub):</code>

<code>        </code><code>logging.debug(</code><code>"Send mail succed!"</code><code>)</code>

<code>    </code><code>else</code><code>:</code>

<code>        </code><code>logging.debug(</code><code>"Send mail failed"</code><code>)</code>

這裡我金山雲沒有用腳本擷取值,而是手動輸入一些值作例子,整個腳本效果如下:

<a href="https://s2.51cto.com/oss/201710/20/461c02dbd695d4d2672effb97e0eff2a.png" target="_blank"></a>

可以看到,在“內插補點”那一欄,正數是紅色,負數是綠色。

新的知識點!

1)上面那個腳本涉及到了B.py擷取A.py的變量的問題,在這裡我舉個例子友善了解: 

假設A.py是這樣的:

<code>a </code><code>=</code> <code>1</code>

<code>b </code><code>=</code> <code>"lebron james"</code>

<code>c </code><code>=</code> <code>"Yao Ming"</code>

<code>def</code> <code>f():</code>

<code>    </code><code>return</code> <code>"function"</code>

B.py需要得到A.py的變量和函數,那麼B.py可以這麼寫:

<code>import</code> <code>A    </code><code>#如果A.py跟B.py不在一個檔案夾下,這裡需要寫絕對路徑</code>

<code>a </code><code>=</code> <code>a.a</code>

<code>print</code> <code>(a)</code>

<code>from</code> <code>a </code><code>import</code> <code>b,c,f</code>

<code>print</code><code>(b)</code>

<code>print</code> <code>(b)</code><code>+</code><code>(c)</code>

<code>f()</code>

執行一下B.py,看一下效果:

<a href="https://s5.51cto.com/wyfs02/M02/07/B4/wKiom1nN63nDEl6iAABdB8mJ0h0217.png" target="_blank"></a>

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