Python 實現郵件發送功能(初級)

  在咱們平常項目中,會常常使用到郵件的發送功能,如何利用Python發送郵件也是一項必備的技能。本文主要講述利用Python來發送郵件的一些基本操做。html

  本章主要包含知識點:python

  1. 郵件發送原理簡述即經常使用smtp郵箱服務器
  2. 發送文字郵件
  3. 發送html郵件

  咱們通常發送郵件時,用到的代理有outlook,qq郵箱等,無論用什麼代理,你都須要登陸你的郵箱,而這個郵箱就是在各大郵箱服務器上開闢的一部分空間,用來接收、發送和存儲你的郵件信息。服務器

  說到郵件發送,不得不瞭解一下SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協議,是一種提供可靠且有效電子郵件傳輸的協議。郵件發送原理簡單講就是代理經過SMTP協議將信息發送到郵箱服務器上,郵箱服務器再經過POP3協議轉發到收件人的郵件服務器中,以下圖:app

  

  所以使用Python發送郵件時,能夠將Python的解釋器當作一個代理,須要首先鏈接到郵箱服務器,將郵件發過去,那麼因爲不一樣公司的郵箱服務器地址不盡相同,這裏列出了一些經常使用的地址以下:測試

   

    既然已經知道郵件發送原理,接下來就是用Python鏈接smtp服務器,不就可發送郵件了。其實強大的python早就封裝好了一個package:email, 利用其中的幾個類便可實現,具體代碼以下:  ui

 1 from email.mime.text import MIMEText  2 from email.header import Header  3 from email.mime.multipart import MIMEMultipart  4 import smtplib  5 
 6 
 7 class Email(object):  8 
 9     def __init__(self): 10         self.smtp = ''
11         self.username = ''
12         self.password = ''
13         
14         self.subject = ''
15         self.sender = ''
16         self.receiver = [] 17         self.cc = [] 18 
19         
20     def message_init(self, html): 21         message = MIMEMultipart() 22         message['subject'] = Header(self.subject, 'utf-8') 23         message['From'] = self.sender 24         message['To'] = ', '.join(self.receiver) 25         message['Cc'] = ', '.join(self.cc) 26 
27         # 解決亂碼, html是html格式的str
28         message_context = MIMEText(html, _subtype='html', _charset='utf-8') 29 
30         # 郵件正文內容
31  message.attach(message_context) 32 
33         return message

  Email自定義類中屬性包含了郵箱服務器的地址,郵箱登陸的用戶名和密碼,郵件主題,發件人,收件人和抄送人。這裏注意了,收件人和抄送人是個list,添加的時候使用append()編碼

  message_init(self, html)即將發送內容進行初始化,包括郵件發送和收件人的初始化。其中 MIMEText(html, _subtype='html', _charset='utf-8') 中,參數一爲發送的郵件內容,爲字符串;參數二表示設置文本格式爲html(郵件都是使用html格式發送的);參數三表示設置編碼格式爲utf-8。如上這樣一個郵件信息包就構造好了,萬事俱備只欠東風,發送郵件的核心代碼以下:spa

1 def send_email(self, html): 2     message = self.message_init(html) 3     smtp_obj = smtplib.SMTP(self.smtp) 4  smtp_obj.login(self.username, self.password) 5     smtp_obj.sendmail(self.sender, self.receiver + self.cc, message.as_string()) 6     smtp_obj.quit()

  模擬正常客戶端郵件發送,遵循登陸->發送->退出原則, 這裏注意sendmail的第二個參數爲 收件人和抄送人的合集。代理

  下面來測試一下這個代碼是否可行,發送一段簡單的文字:  code

 1 if __name__ == '__main__':  2     print('start……')  3     sende = Email()  4     strs = "This is a test email / 這是一封測試郵件"
 5 
 6     sende.smtp = 'smtp.163.com'
 7     sende.username = 'wjian.coming@163.com'
 8     sende.password = 'xxxxxx'
 9 
10     sende.subject = 'Test/測試郵件'
11     sende.sender = 'wjian.coming@163.com'
12     sende.receiver.append('948001879@qq.com') 13     sende.cc.append('948001879@qq.com') 14 
15  sende.send_email(strs) 16 
17     print('end')

  如上,測試了發送中文和英文兩種語言,發送了測試的簡單字符串,實測結果可行,截圖以下

 

  那麼如何發送html格式文件呢?其實想一想也很簡單,將html文件所有讀取出來以後,轉爲str便可,如何轉換,能夠參考我以前寫的文章,讀取文件生成str,參考連接:http://www.javashuo.com/article/p-sadvbupl-ne.html 使用 readFile 方法便可,而後複用上述的方法。具體的代碼就不在這裏體現了,有興趣的同窗能夠結合實現一下呢。

  

  那麼,利用Python如何發送郵件已經都瞭解了吧,那麼這時就會引起更深的問題:如何添加附件?如何發送圖片呢? Good question! 關注我,下期爲你解答。

  (但願個人文章可以助你一臂之力,成就更輝煌的你,關注我,咱們一塊兒進步)

相關文章
相關標籤/搜索