1. 程式人生 > 實用技巧 >【Nginx】面試官竟然問我Nginx如何生成縮圖,還好我看了這篇文章!!

【Nginx】面試官竟然問我Nginx如何生成縮圖,還好我看了這篇文章!!

  在我們日常專案中,會經常使用到郵件的傳送功能,如何利用Python傳送郵件也是一項必備的技能。本文主要講述利用Python來發送郵件的一些基本操作。

  本章主要包含知識點:

  1. 郵件傳送原理簡述即常用smtp郵箱伺服器
  2. 傳送文字郵件
  3. 傳送html郵件

  我們一般傳送郵件時,用到的代理有outlook,qq郵箱等,不管用什麼代理,你都需要登入你的郵箱,而這個郵箱就是在各大郵箱伺服器上開闢的一部分空間,用來接收、傳送和儲存你的郵件資訊。

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

  

  因此使用Python傳送郵件時,可以將Python的直譯器當做一個代理,需要首先連線到郵箱伺服器,將郵件發過去,那麼由於不同公司的郵箱伺服器地址不盡相同,這裡列出了一些常用的地址如下:

  

  既然已經知道郵件傳送原理,接下來就是用Python連線smtp伺服器,不就可傳送郵件了。其實強大的python早就封裝好了一個package:email, 利用其中的幾個類即可實現,具體程式碼如下:  

 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。如上這樣一個郵件資訊包就構造好了,萬事俱備只欠東風,傳送郵件的核心程式碼如下:

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的第二個引數為 收件人和抄送人的合集。

  下面來測試一下這個程式碼是否可行,傳送一段簡單的文字:  

 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 = '[email protected]'
 8     sende.password = 'xxxxxx'
 9 
10     sende.subject = 'Test/測試郵件'
11     sende.sender = '[email protected]'
12     sende.receiver.append('[email protected]')
13     sende.cc.append('[email protected]')
14 
15   sende.send_email(strs)
16 
17     print('end')

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

 

  那麼如何傳送html格式檔案呢?其實想想也很簡單,將html檔案全部讀取出來之後,轉為str即可,如何轉換,可以參考我之前寫的文章,讀取檔案生成str,參考連結:https://www.cnblogs.com/potato-find/p/13216471.html使用readFile 方法即可,然後複用上述的方法。具體的程式碼就不在這裡體現了,有興趣的同學可以結合實現一下呢。

  

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

  (希望我的文章能夠助你一臂之力,成就更輝煌的你,關注我,我們一起進步)