天天看點

使用python發送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

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

<code>#coding:utf8</code>

<code> </code> 

<code>import</code> <code>smtplib</code>

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

<code>import</code> <code>sys</code>

<code>reload</code><code>(sys)</code>

<code>sys.setdefaultencoding(</code><code>'utf-8'</code><code>) </code><code>#重新設定字元集,預設是ascii</code>

<code>mail_host</code><code>=</code><code>"xxxxx"</code>   <code>#郵件主機</code>

<code>mail_user</code><code>=</code><code>"xxxxxxx"</code>     <code>#發送郵件的使用者名</code>

<code>mail_pass</code><code>=</code><code>"xxxx"</code>        <code>#發郵件的密碼 </code>

<code>class</code> <code>Send_notice_mail(</code><code>object</code><code>):</code>

<code>  </code><code>def</code> <code>__init__(</code><code>self</code><code>,migrate_date,records): </code><code>#需要兩個資料  </code>

<code>     </code><code>self</code><code>.migrate_date</code><code>=</code><code>migrate_date </code><code># migrate_date:時間 </code>

<code>     </code><code>self</code><code>.record</code><code>=</code><code>records      </code><code>#源記錄中包含郵箱</code>

<code>     </code><code>for</code> <code>records </code><code>in</code> <code>self</code><code>.record: </code>

<code>       </code><code>self</code><code>.mail_key</code><code>=</code><code>{}</code>

<code>       </code><code>self</code><code>.mail_key[</code><code>'Email'</code><code>]</code><code>=</code><code>records[</code><code>'Email'</code><code>].strip().lower()</code><code># 将郵箱名稱改成小寫</code>

<code>       </code><code>records.update(</code><code>self</code><code>.mail_key) </code><code>#更新字典</code>

<code>     </code><code>self</code><code>.__Read_Templats() </code><code>#讀取模闆</code>

<code>  </code><code>def</code> <code>__Read_Templats(</code><code>self</code><code>):</code>

<code>    </code><code>InFile </code><code>=</code> <code>open</code><code>(</code><code>"qianyi_before.html"</code><code>,</code><code>"rb"</code><code>) </code><code>#讀取html模闆</code>

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

<code>      </code><code>str_text</code><code>=</code><code>''</code>

<code>      </code><code>all_the_text </code><code>=</code> <code>InFile.readlines() </code><code>#讀取檔案生成一個清單</code>

<code>      </code><code>for</code> <code>text </code><code>in</code> <code>all_the_text:</code>

<code>        </code><code>str_text</code><code>+</code><code>=</code><code>text.strip() </code><code>#去除多餘的行空格</code>

<code>    </code><code>finally</code><code>:</code>

<code>      </code><code>InFile.close()</code>

<code>    </code><code>str_record</code><code>=</code><code>''</code>

<code>    </code><code>for</code> <code>i </code><code>in</code> <code>self</code><code>.record:</code>

<code>      </code><code>#print self.record</code>

<code>      </code> 

<code>      </code><code>if</code> <code>i.has_key(</code><code>'Name_Server'</code><code>): </code><code>#此處由于業務需要,源記錄裡可能隻能使用者資訊,而無資料</code>

<code>        </code><code>if</code> <code>len</code><code>(i[</code><code>'Name_Server'</code><code>])&gt;</code><code>4</code><code>:</code>

<code>           </code><code>ns_name</code><code>=</code><code>'.'</code><code>.join(i[</code><code>'Name_Server'</code><code>].split(</code><code>'|'</code><code>)[</code><code>1</code><code>:][</code><code>0</code><code>].split(</code><code>'.'</code><code>)[</code><code>1</code><code>:])</code>

<code>           </code><code>if</code> <code>ns_name</code><code>=</code><code>=</code><code>'xxxxx'</code> <code>or</code> <code>ns_name</code><code>=</code><code>=</code><code>'xxxxx'</code><code>:</code>

<code>              </code><code>i[</code><code>'Name_Server'</code><code>]</code><code>=</code><code>"xxxxx"</code><code>.encode(</code><code>"GBK"</code><code>)</code>

<code>              </code><code>str_record</code><code>+</code><code>=</code><code>'&lt;tr&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Web_Nu'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Domain'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Name_Server'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'New_Ip'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>"系統自動修改"</code><code>.encode(</code><code>"GBK"</code><code>)</code><code>+</code><code>'&lt;/td&gt;&lt;/tr&gt;'</code>

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

<code>              </code><code>i[</code><code>'Name_Server'</code><code>]</code><code>=</code><code>i[</code><code>'Name_Server'</code><code>].split(</code><code>'|'</code><code>)[</code><code>1</code><code>:][</code><code>0</code><code>]</code>

<code>              </code><code>str_record</code><code>+</code><code>=</code><code>'&lt;tr&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Web_Nu'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Domain'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Name_Server'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'New_Ip'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td style="color: #f00;"&gt;'</code><code>+</code><code>"需要人工修改"</code><code>.encode(</code><code>"GBK"</code><code>)</code><code>+</code><code>'&lt;/td&gt;&lt;/tr&gt;'</code>

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

<code>         </code><code>str_record</code><code>+</code><code>=</code><code>'&lt;tr&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Web_Nu'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Domain'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Name_Server'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'New_Ip'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td style="color: #f00;"&gt;'</code><code>+</code><code>"需要人工修改"</code><code>.encode(</code><code>"GBK"</code><code>)</code><code>+</code><code>'&lt;/td&gt;&lt;/tr&gt;'</code>

<code>        </code><code>XML</code><code>=</code><code>str_text.replace(</code><code>"opt_time"</code><code>,</code><code>self</code><code>.migrate_date) </code><code>#将組合的資料替換模闆的變量</code>

<code>        </code><code>XML</code><code>=</code><code>XML.replace(</code><code>"web_info"</code><code>,str_record)</code>

<code>        </code><code>self</code><code>.html_text </code><code>=</code> <code>XML.decode(</code><code>"GBK"</code><code>) </code><code>#對模闆解碼</code>

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

<code>        </code><code>str_record</code><code>+</code><code>=</code><code>'&lt;tr&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'Web_Nu'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>i[</code><code>'New_Ip'</code><code>]</code><code>+</code><code>'&lt;/td&gt;&lt;td&gt;'</code><code>+</code><code>'&lt;/td&gt;&lt;/tr&gt;'</code>

<code>        </code><code>XML</code><code>=</code><code>str_text.replace(</code><code>"opt_time"</code><code>,</code><code>self</code><code>.migrate_date)</code>

<code>        </code><code>self</code><code>.html_text </code><code>=</code> <code>XML.decode(</code><code>"GBK"</code><code>)</code>

<code>    </code><code>#print self.migrate_date</code>

<code>   </code> 

<code>  </code><code>def</code> <code>get_content_info(</code><code>self</code><code>):</code>

<code>     </code><code>return</code> <code>self</code><code>.html_text  </code><code>#擷取替換後模闆資料</code>

<code>  </code><code>def</code> <code>send_mail_opt(</code><code>self</code><code>,sub,content):  </code>

<code>    </code><code>#print "go send_mail......................"</code>

<code>    </code><code>me</code><code>=</code><code>"xxxx"</code><code>.encode(</code><code>"GBK"</code><code>)</code><code>+</code><code>"&lt;"</code><code>+</code><code>mail_user</code><code>+</code><code>"&gt;"</code> <code>#發信人  </code>

<code>    </code><code>msg </code><code>=</code> <code>MIMEText(content,</code><code>'html'</code><code>,</code><code>'GBK'</code><code>)</code><code>#消息格式與編碼  </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>msg[</code><code>'To'</code><code>] </code><code>=</code> <code>self</code><code>.mail_key[</code><code>'Email'</code><code>] </code><code>#收信人  </code>

<code>    </code> 

<code>    </code><code>#print 'xxx',self.mail_key['Email']</code>

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

<code>      </code><code>server </code><code>=</code> <code>smtplib.SMTP()  </code>

<code>      </code><code>server.connect(mail_host)  </code>

<code>      </code><code>server.login(mail_user,mail_pass) </code>

<code>      </code><code>#print "xxxxxxx",self.mail_key['Email'] </code>

<code>      </code><code>server.sendmail(me, </code><code>self</code><code>.mail_key[</code><code>'Email'</code><code>], msg.as_string())  </code>

<code>      </code><code>server.close()  </code>

<code>      </code><code>with </code><code>open</code><code>(</code><code>'/home/migrate/mail_records/mail_list.txt'</code><code>,</code><code>'a'</code><code>) as ml:</code>

<code>        </code><code>ml.write(</code><code>self</code><code>.mail_key[</code><code>'Email'</code><code>]</code><code>+</code><code>'\n'</code><code>)</code>

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

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

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

<code>migrate_date</code><code>=</code><code>'2015-07-04'</code>

<code>d</code><code>=</code><code>[{</code><code>'Phone'</code><code>: </code><code>'1233333'</code><code>,</code><code>'Web_Nu'</code><code>: </code><code>'wexsde333'</code><code>, </code><code>'Email'</code><code>: </code><code>'[email protected]'</code><code>}, {</code><code>'Domain'</code><code>: </code><code>'www.kedie.com'</code><code>, </code><code>'Name_Server'</code><code>: </code><code>'|xxxxx.com.cn'</code><code>, </code><code>'Dns_Ip'</code><code>: </code><code>'xxxxxxxx'</code><code>, </code><code>'Phone'</code><code>: </code><code>'19999999'</code><code>, </code><code>'Old_Ip'</code><code>: </code><code>'1.1.1.1'</code><code>, </code><code>'New_Ip'</code><code>:</code><code>'2.2.2.2'</code><code>, </code><code>'Web_Nu'</code><code>: </code><code>'webspnc'</code><code>, </code><code>'Email'</code><code>: </code><code>'[email protected]'</code><code>}]</code>

<code>s</code><code>=</code><code>Send_notice_mail(migrate_date,d)</code>

<code>type_html</code><code>=</code><code>s.get_content_info()</code>

<code>#print type_html</code>

<code>s.send_mail_opt(</code><code>"xxxxxxxxxx"</code><code>.encode(</code><code>"GBK"</code><code>),type_html)</code>

用到的子產品:

  import smtplib #以登入的方式發郵件,如果非登入的方式可能被對方認為垃圾郵件被拒

  from email.mime.text import MIMEText 源資料類型的定義 

ps:雖然寫的很渣,但總算将功能實作了,不說了,繼續後子產品了,學習python不看标準庫,學了一點用都沒有。。。

本文轉自 jinlinger 51CTO部落格,原文連結:http://blog.51cto.com/essun/1671937,如需轉載請自行聯系原作者