<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          人人都能懂的 Python 自動發(fā)送郵件實戰(zhàn)教程

          共 7186字,需瀏覽 15分鐘

           ·

          2021-06-30 18:42

          自動發(fā)送郵件能應(yīng)用于許多場景中,比如我想要知道股票策略中的股票池是否有實時的更新,這時候如果再拉一遍數(shù)據(jù),跑一遍腳本,實在是太浪費時間了。為什么不把這一套流程放到服務(wù)器上,然后到點自動運行并發(fā)送郵件呢?

          類似的應(yīng)用場景還有很多,不僅僅是在股票策略提醒上,比如定時向某些人發(fā)送郵件;網(wǎng)站宕機了,實時發(fā)送郵件提醒;網(wǎng)站負(fù)載過高,發(fā)送郵件提醒......等等。

          下面就來講講怎么用Python構(gòu)建一個自動發(fā)送郵件的腳本。

          1.開啟SMTP服務(wù)



          為了實現(xiàn)自動發(fā)送郵件的目的,我們需要在郵箱中開啟SMTP服務(wù):

          這點很關(guān)鍵,別忘了去開啟SMTP,否則郵件是無法發(fā)送成功的。然后你還需要點擊下面生成授權(quán)碼,這個授權(quán)碼才是使用Python發(fā)送郵件時的真正密碼。

          郵箱設(shè)定成功后,就可以開始腳本開發(fā)了。

          2.準(zhǔn)備



          開始之前,你要確保Python和pip已經(jīng)成功安裝在電腦上,如果沒有,可以訪問這篇文章:超詳細(xì)Python安裝指南 進行安裝。

          (可選1) 如果你用Python的目的是數(shù)據(jù)分析,可以直接安裝Anaconda:Python數(shù)據(jù)分析與挖掘好幫手—Anaconda,它內(nèi)置了Python和pip.

          (可選2) 此外,推薦大家用VSCode編輯器,它有許多的優(yōu)點:Python 編程的最好搭檔—VSCode 詳細(xì)指南。

          請選擇以下任一種方式輸入命令安裝依賴
          1. Windows 環(huán)境 打開 Cmd (開始-運行-CMD)。
          2. MacOS 環(huán)境 打開 Terminal (command+空格輸入Terminal)。
          3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.

          pip install yagmail


          看到 Successfully installed xxx 則說明安裝成功。本文全部源代碼可在后臺回復(fù):自動發(fā)送郵件 獲得。

          3.編寫腳本



          今天需要用到的模塊是yagmail,一個非常方便的Python郵件發(fā)送模塊,用這個模塊,你甚至能一行命令發(fā)送郵件:

          yag = yagmail.SMTP(
              host='smtp.qq.com', user='你的郵箱',
              password='你的鑒權(quán)碼', smtp_ssl=True
          ).send(["發(fā)送對象"], "主題", "內(nèi)容")


          為了讓這個發(fā)送郵件的方法更加具備可用性,我們將其封裝到一個類中:

          import time
          import yagmail

          class Mail:
              """
              郵件相關(guān)類
              """


              def sendmail(self, msg, title, receivers):
                  """
                  發(fā)送郵件
                  
                  Arguments:
                      msg {str} -- 郵件正文
                      title {str} -- 郵件標(biāo)題
                      receivers {list} -- 郵件接收者,數(shù)組
                  """


                  yag = yagmail.SMTP(
                      host='smtp.qq.com', user='你的郵箱',
                      password='你的鑒權(quán)碼', smtp_ssl=True
                  )

                  try:
                      yag.send(receivers, title, msg)
                      print("郵件發(fā)送成功")

                  except BaseException as e:
                      print(e)
                      print("Error: 無法發(fā)送郵件")


          這個類里還可以封裝很多其他東西,比如log函數(shù),用于顯示時間:

          import time
          import yagmail

          class Mail:
              """
              郵件相關(guān)類
              """


              def log(self, content):
                  now_time = time.strftime(
                      "%Y-%m-%d %H:%M:%S", time.localtime()
                  )
                  print(f'{now_time}: {content}')


          這樣,需要顯示時間的時候只需要調(diào)用self.log即可,優(yōu)化后的完整代碼如下:

          import time
          import yagmail

          class Mail:
              """
              郵件相關(guān)類
              """


              def log(self, content):
                  now_time = time.strftime(
                      "%Y-%m-%d %H:%M:%S", time.localtime()
                  )
                  print(f'{now_time}: {content}')

              def sendmail(self, msg, title, receivers):
                  """
                  發(fā)送郵件
                  
                  Arguments:
                      msg {str} -- 郵件正文
                      title {str} -- 郵件標(biāo)題
                      receivers {list} -- 郵件接收者,數(shù)組
                  """


                  yag = yagmail.SMTP(
                      host='smtp.qq.com', user='你的郵箱',
                      password='你的鑒權(quán)碼', smtp_ssl=True
                  )

                  try:
                      yag.send(receivers, title, msg)
                      self.log("郵件發(fā)送成功")

                  except BaseException as e:
                      print (e)
                      self.log("Error: 無法發(fā)送郵件")


          發(fā)送成功時顯示:

          # PS D:\CODE\stock\api> python .\sendmail_yagmail.py
          2021-06-21 00:00:00: 郵件發(fā)送成功


          4.小例子



          將剛剛編寫完的類保存為sendmail.py,接下來就可以嘗試一個小例子。我們用一個自動監(jiān)控網(wǎng)站是否宕機的小腳本做示例:

          import time
          import requests
          from sendmail import Mail

          while True:
              response = requests.get('https://pythondict.com')

              # 根據(jù)狀態(tài)碼判斷網(wǎng)站是否正常
              if response.status_code != 200:
                  Mail().sendmail(
                      '哥, pythondict掛了', 'Python實用寶典網(wǎng)站異常監(jiān)控', ['你的郵箱']
                  )

              time.sleep(600)


          通過 requests.get 請求網(wǎng)站,使用 response.status_code 得到狀態(tài)碼,200 為正常,其他情況均為異常。這個檢測每十分鐘運行一次,因此 time.sleep(600) .

          就這樣,我們構(gòu)建起了一個非常簡單的網(wǎng)站異常監(jiān)控腳本,如果你真的要在服務(wù)器上運行這個腳本,請記得使用 nohup 讓其在后臺運行:

          nohup python test.py &


          我們的文章到此就結(jié)束啦,如果你喜歡今天的Python 實戰(zhàn)教程,請持續(xù)關(guān)注我們!。




          推薦閱讀:


          知識星球菜鳥學(xué)投資,星球來了!


          入門: 最全的零基礎(chǔ)學(xué)Python的問題  | 零基礎(chǔ)學(xué)了8個月的Python  | 實戰(zhàn)項目 |學(xué)Python就是這條捷徑


          干貨:爬取豆瓣短評,電影《后來的我們》 | 38年NBA最佳球員分析 |   從萬眾期待到口碑撲街!唐探3令人失望  | 笑看新倚天屠龍記 | 燈謎答題王 |用Python做個海量小姐姐素描圖 |碟中諜這么火,我用機器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          趣味:彈球游戲  | 九宮格  | 漂亮的花 | 兩百行Python《天天酷跑》游戲!


          AI: 會做詩的機器人 | 給圖片上色 | 預(yù)測收入 | 碟中諜這么火,我用機器學(xué)習(xí)做個迷你推薦系統(tǒng)電影


          小工具: Pdf轉(zhuǎn)Word,輕松搞定表格和水??! | 一鍵把html網(wǎng)頁保存為pdf!|  再見PDF提取收費! | 用90行代碼打造最強PDF轉(zhuǎn)換器,word、PPT、excel、markdown、html一鍵轉(zhuǎn)換 | 制作一款釘釘?shù)蛢r機票提示器! |60行代碼做了一個語音壁紙切換器天天看小姐姐!


          年度爆款文案


          點閱讀原文,領(lǐng)AI全套資料!

          瀏覽 16
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  超碰网站在线观看 | 青青草网| 精品久久免费一区二区三区 | 天天操天天干天天操 | 国产成人精品一区二区三区四区 |