首页
/
每日頭條
/
科技
/
廖雪峰python學習筆記命令行模式
廖雪峰python學習筆記命令行模式
更新时间:2025-01-08 01:19:06

  複習一下上一關的内容 ,模塊的相關知識,以及學習模塊的方法(2圖)

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(1)

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(2)

  得了,我們可以開始今天的項目實操了

  1. 明确項目目标

  這一關的主題,其實最早是來源于往期學員的一個問題:學員小賈是一名外貿人員,每到了節假日,要給客戶發祝福郵件。

  雖然現在群發郵件比較方便,但還是要每次手動添加收件人的郵箱。小賈想:要是能夠自動發送郵件給這些人就好了。他找到了助教求助。

  之前跟你聊過,希望學習Python知識,是能夠幫助大家解決實際問題的。而小賈的問題,就是一個可以完美地被Python解決的需求,而且在職場中也是一個普遍存在的需求。

  為了完成這個項目呢,我們要學會自學新的模塊

  2. 分解過程,拆解項目

  我們可以把這個項目拆解成三個版本,各個版本功能逐步完善 。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(3)

  3. 逐步執行,代碼實現

  3.1 版本1.0:學習模塊,發一封簡單郵件

  3.1.1搜索模塊資料

  在編程世界中,我們不需要什麼知識都一把抓,而是遇到問題之後,産生了某種需求,才會去找對應的解決方案。

  這個方案可能是某個模塊,也可能是某個函數~

  經過搜索大法後,我們可以知道需要實現這一版本的功能需要用到python的兩個内置模塊 smtplib,email

  可以初步畫一下這個簡單的結構圖 ,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(4)

  這裡在搜索的時候跟你們說個技巧吧,比如你想要找到stmplib 這個 模塊,那麼你搜索‘stmplib python’,如果你英文足夠好的話,那你可以去看官方文檔,如果你隻喜歡看中文的話,我建議你去這個網站去搜索資料 ‘CSDN博客’,這個網站上有最優秀和經驗最豐富的碼師可以交流,他們的很多博客也可以借鑒、參考。

  這是我費了很大力氣找到的smtplib的方法 ,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(5)

  我們可以看到,為了減少變量重複出現的次數,一般将 smtplib.SMTP() 賦值給server,我本身也認同這樣的辦法

  這裡給大家簡單科普一下,SMTP (Simple Mail Transfer Protocol)翻譯過來是“簡單郵件傳輸協”的意思,SMTP 協議是由源服務器到目的地服務器傳送郵件的一組規則。

  可以簡單理解為:我們需要通過SMTP指定一個服務器,這樣才能把郵件送到另一個服務器。

  第四行代碼,就是幹這個工作的,連接(connect)指定的服務器。

  host是指定連接的郵箱服務器,你可以指定服務器的域名。通過搜索“xx郵箱服務器地址”,就可以找到。

  port 是“端口”的意思。端口屬于計算機網絡知識裡的内容,你可以自行搜索了解,現在我們隻要知道它是一個【整數】即可。

  我們需要指定SMTP服務使用的端口号,一般情況下SMTP默認端口号為25。

  風變編程官網的服務器名稱是mail.forchange.tech,端口是587。

  3.1.2 用QQ做案例講解

  因為一般二十幾歲的年輕人使用最多的還是qq郵箱,所以我會以QQ郵箱作為講解例子

  QQ 郵箱采用的加密方式是ssl,我們需要寫成這樣:如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(6)

  然後接下來我要講一個tips,其實我們一般qq郵箱默認是關閉SMTP服務的,你需要自行手動開啟,進入你的QQ郵箱後,點擊位于頂部的【設置】按鈕,選擇【賬戶設置】,進入到這個界面,如圖示,藍色方框的那個要保持開啟,照着他的流程做便可以開啟

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(7)

  成功開啟以後,網頁會給你一個授權碼,把它保存下來,接下來的代碼中,發郵件的時候用到的是授權碼,而不是你的QQ密碼了。它是4*4=16位的,也就是**** **** **** **** 這樣的,還有不要随意洩露,不然的話可能會被癫佬拿去打廣告。

  好了,一步一步講解代碼

  login是登錄的意思,也就是登錄你指定的服務器用的,需要輸入兩個參數:登錄郵箱和授權碼。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(8)

  把兩個參數放在最前面。這部分的代碼我們也可以寫出來了:如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(9)

  第六行代碼sendmail是“發送郵件”的意思,是發送郵件用的,sendmail()方法需要三個參數:發件人,收件人和郵件内容。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(10)

  msg.as_string()是一個字符串類型:as_string()是将發送的信息msg變為字符串類型。最後一行代碼,quit是“退出”的意思,就是退出服務器。

  3.1.3 對smtplib 做一個初步總結,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(11)

  3.1.4 email 模塊

  email 模塊:也就是用來寫郵件内容的模塊。這個内容可以是純文本、HTML内容、圖片、附件等多種形式。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(12)

  每種形式對應的導入方式是這樣的:如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(13)

  這裡再次給大家科普一下,

  你可以複制上面的内容到本地的編輯器上,按住 ctrl 點擊查看含義。

  請你按住ctrl同時點擊mime,你會看到一個名為init.py的空文件,這說明 email是其實是一個“包”。當然,并不是“包治百病”的那個“包”。

  這就要談到“模塊”和“包”的區别了,模塊(module)一般是一個文件,而包(package)是一個目錄,一個包中可以包含很多個模塊,可以說包是“模塊打包”組成的。

  但為什麼看到那個空文件,就能知道email是包呢?這是因為Python中的包都必須默認包含一個init.py的文件。

  init.py控制着包的導入行為。假如這個文件為空,那麼我們僅僅導入包的話,就什麼都做不了。所以直接import email是行不通的。

  所以,我們就需要使用from … import …語句,從email包目錄下的【某個文件】引入【需要的對象】。比如從email包下的text文件中引入MIMEText方法。中文說起來有點複雜,看代碼就懂了:如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(14)

  通過簡單的學習,我們就能發現MIMEText()方法需要輸入三個參數:文本内容,文本類型和文本編碼。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(15)

  文本類型和文本編碼,我們默認用plain和utf-8。文本内容,我就寫一句最簡單的“send by python”吧,你可以寫自己想寫的話啦。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(16)

  3.1.5綜合兩個模塊的代碼結構為,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(17)

  那麼細緻化結構接就是,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(18)

  3.1.6 那麼版本1.0 的代碼為,(帶注釋)兩圖

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(19)

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(20)

  這裡再給大家科普一下啊,就是如果你的python版本 是3.7 以上的,可能會報錯,

  ValueError: server_hostname cannot be an empty string or start with a leading dot.

  因為Python 3.7修改了ssl.py,導緻smtplib.SMTP_SSL也連帶産生了問題。那你需要這樣子做,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(21)

  經過九牛二虎之力,我終于是收到了人生第一封由python發來的QQ郵件,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(22)

  說實話,自己還感覺挺不可思議的

  3.2 版本2.0:給自己發一封完整郵件

  3.2.1 完整的郵件就是說,增加多兩個功能,完善一下。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(23)

  我們要增加這幾行代碼,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(24)

  第一行代碼,從email包引入Header()方法。Header()是用來構建郵件頭的。标準郵件需要三個頭部信息:From , To 和 Subject ,第三到五行代碼就提供了這三個信息。這裡我們可以自定義,比如from發件人郵箱地址,to收件人郵箱地址,主題“python test”。

  等我們增加了郵件頭的代碼後,收到郵件會有所不同,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(25)

  而且你還可以定義,如圖示

  

  原本郵件内容是寫在這裡:如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(27)

  如果你想要寫很長的内容,建議先設置一個變量text用來放正文内容。如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(28)

  3.2.2 所以版本2.0 的最終代碼為,如圖示(3圖)

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(29)

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(30)

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(31)

  3.3 版本3.0:群發完整郵件

  3.3.1 這裡主要講解一下,用python群發郵件的三種方法,如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(32)

  一,是将收件人信箱的變量設置成一個可以裝多個内容的列表:需要注意的是,to_addrs變量也将作為參數被傳入Header方法中:

  直接運行程序的話,這裡就會發生錯誤:AttributeError: list object has no attribute decode。

  我們要将to_addrs變成一個字符串,将列表變成一個字符串,這個時候我們就要用到join()函數了

  一分鐘回顧一下join()函數的用法,大家看案例代碼 ,代碼以及運行結果如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(33)

  join()的用法是str.join(sequence)

  二,接下來是while循環,代碼以及運行結果如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(34)

  三,将郵箱地址寫入csv模塊的方法是write(),步驟是:1.引入csv模塊;2.提供需要寫入csv文件的數據,3.建文件并寫入。代碼如圖示

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(35)

  好了,關于python發郵件的全部知識就講解到這了。

  4. 1 第17關課後練習-自制二維碼

  練習介紹

  練習目标

  我們會通過今天的作業,學習一個新的模塊:MyQR,制作一個動态二維碼。

  練習要求

  在昨天的練習裡,你已經可以通過自己的學習,完成代碼的升級。

  所以,今天我們不妨多做些新的嘗試。

  這次的練習,沒有提示,沒有準備好的網址。

  需求很明确:請你在本地編輯器(如vscode、Pycharm),用 Python 制作一個動态二維碼。

  所以,請你運用在課堂上看到的提示和知識,去思考,去搜索,去學習,完成今天的練習。

  代碼實操

  你應該已經知道了這個模塊是:MyQR,也能讀懂相關的代碼。

  請你自學相關模塊知識後,自行下載一個gif,然後在本地編輯器(如vscode、Pycharm)完成代碼吧。

  因為系統裡無法展示最後的動态二維碼,當你在本地編輯器完成代碼并運行成功後,直接點擊右側的運行進入下一步即可。

  對了,不要忘了先安裝myqr模塊,Windows終端裡運行pip install myqr,Mac終端運行pip3 install myqr

  示例代碼以及運行結果如圖示(2圖)

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(36)

  這個生成的二維碼就是風變編程官網的鍊接

  4.2 進階練習-絕對值得多種求法

  練習介紹

  練習目标:

  通過這個練習,你至少可以用3種方法去求某個數的絕對值。

  練習要求:

  請你通過搜索和步驟中的提示,用不同的方法求絕對值。

  建議将其封裝成函數,如“abs_value1()”。

  廖雪峰python學習筆記命令行模式(風變編程-python基礎語法-第17關用python發郵件)(37)

  ——Directly made by 潛·2ⁿ·index-crossing

  ,

Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
家庭影院怎麼布線最好
家庭影院怎麼布線最好
家庭影院怎麼布線最好?家庭影院怎麼布線?随着人們生活水平的不斷提高,家庭影院也為了一種時尚的休閑生活方式,不用去電影院,一樣可以看到同樣效果的電影未來幾年,中國家庭影院市場還會穩步增長那麼家庭影院怎麼布線?家庭影院安裝布線方法?接下來詳細為...
2025-01-08
1tb加256g夠用嗎
1tb加256g夠用嗎
專注行業評述,深挖科技故事!大家好,歡迎來到館長Zero的内容欄目。文|館長Zero前段時間iPhone14系列正式發布,作為頂級旗艦機型,其Pro版本也是配備了1TB存儲版本,然而其高昂的售價也成了網友們讨論的焦點之一。我們拿iPhone...
2025-01-08
大白話漢語手語
大白話漢語手語
大白話漢語手語?随着北京冬殘奧會的臨近,交流冰雪運動成為聾人朋友近期的熱門話題如今,一套冰雪運動項目的手語以及冰墩墩、雪容融的“普通話”版手語正式與聽障朋友見面參與研究、制定冰雪運動項目手語的大部分人都是使用手語的聾人經過一年研究測試,最終...
2025-01-08
摩托羅拉moto g32
摩托羅拉moto g32
IT之家9月16日消息,摩托羅拉發布了兩款新的MotoE系列手機,硬件幾乎相同,主要是系統有區别,MotoE22運行基于安卓12的摩托羅拉MyUX系統,而MotoE22i則運行安卓12Go版系統。MotoE22兩款手機都采用6.5英寸HDL...
2025-01-08
python word文檔處理庫
python word文檔處理庫
Python-docx模塊基礎入門之一Word文件讀取操作1.打開Word文檔document讀取存在的文件,要用到docx庫中的Documentdocument=Document(file_path),file_path表示要打開的Wor...
2025-01-08
Copyright 2023-2025 - www.tftnews.com All Rights Reserved