0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

怎么用Python構(gòu)建一個(gè)自動(dòng)發(fā)送郵件的腳本

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-21 14:47 ? 次閱讀

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

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

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

1.開(kāi)啟SMTP服務(wù)

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

圖片

圖片

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

圖片

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

2.準(zhǔn)備

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

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

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

請(qǐng)選擇以下任一種方式輸入命令安裝依賴

  1. Windows 環(huán)境 打開(kāi) Cmd (開(kāi)始-運(yùn)行-CMD)。
  2. MacOS 環(huán)境 打開(kāi) Terminal (command+空格輸入Terminal)。
  3. 如果你用的是 VSCode編輯器 或 Pycharm,可以直接使用界面下方的Terminal.
pip install yagmail

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

3.編寫(xiě)腳本

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

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

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

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: 無(wú)法發(fā)送郵件")

這個(gè)類里還可以封裝很多其他東西,比如log函數(shù),用于顯示時(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}')

這樣,需要顯示時(shí)間的時(shí)候只需要調(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: 無(wú)法發(fā)送郵件")

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

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

4.小例子

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

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實(shí)用寶典網(wǎng)站異常監(jiān)控', ['你的郵箱']
        )

    time.sleep(600)

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

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

nohup python test.py &
聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 服務(wù)器
    +關(guān)注

    關(guān)注

    12

    文章

    9184

    瀏覽量

    85490
  • 郵件
    +關(guān)注

    關(guān)注

    0

    文章

    32

    瀏覽量

    18815
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84729
  • 腳本
    +關(guān)注

    關(guān)注

    1

    文章

    390

    瀏覽量

    14879
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    基于Python腳本的R語(yǔ)言的函數(shù)

    本文介紹了采用創(chuàng)建個(gè)Python腳本,腳本模仿R風(fēng)格的函數(shù)的方法來(lái)方便地進(jìn)行統(tǒng)計(jì)。 是
    的頭像 發(fā)表于 10-12 09:33 ?2118次閱讀
    基于<b class='flag-5'>Python</b><b class='flag-5'>腳本</b>的R語(yǔ)言的函數(shù)

    介紹10個(gè)Python自動(dòng)腳本

    在這個(gè)自動(dòng)化時(shí)代,我們有很多重復(fù)無(wú)聊的工作要做。想想這些你不再需要一次又一次地做的無(wú)聊的事情,讓它自動(dòng)化,讓你的生活更輕松。那么在本文中,我將向您介紹 10 個(gè)
    發(fā)表于 10-17 09:27 ?943次閱讀

    10個(gè)Python腳本來(lái)自動(dòng)化你的日常任務(wù)

    今天浩道跟大家分享幾個(gè)關(guān)于python自動(dòng)化日常工作的實(shí)用案例腳本!
    發(fā)表于 10-25 09:04 ?727次閱讀

    10個(gè)殺手級(jí)的Python自動(dòng)腳本

    今天浩道跟大家分享10個(gè)日常工作中用到的python自動(dòng)腳本。讓你感受python簡(jiǎn)單強(qiáng)大
    發(fā)表于 11-28 11:07 ?689次閱讀

    如何在沒(méi)有安裝郵件的公司電腦上LABVIEW來(lái)自動(dòng)發(fā)送郵件

    如何在沒(méi)有安裝郵件的公司電腦上LABVIEW來(lái)自動(dòng)發(fā)送郵件,請(qǐng)大神
    發(fā)表于 08-26 16:00

    python自動(dòng)編寫(xiě)腳本及分配引腳

    對(duì)于具有484個(gè)引腳的芯片,如果手動(dòng)一個(gè)一個(gè)設(shè)置引腳,必然是場(chǎng)噩夢(mèng)。網(wǎng)上有使用Capture進(jìn)行自動(dòng)導(dǎo)入的帖子,不過(guò)沒(méi)有找到AD方面的帖子。本文使用
    發(fā)表于 07-23 06:49

    Python爬蟲(chóng)8個(gè)常用的爬蟲(chóng)技巧分析總結(jié)

    python也差不多年多了,python應(yīng)用最多的場(chǎng)景還是web快速開(kāi)發(fā)、爬蟲(chóng)、自動(dòng)化運(yùn)維:寫(xiě)過(guò)簡(jiǎn)單網(wǎng)站、寫(xiě)過(guò)
    的頭像 發(fā)表于 08-18 11:45 ?5109次閱讀

    如何用Python制作個(gè)自動(dòng)發(fā)送程序

    怎么辦呢?是時(shí)候讓Python登場(chǎng)了! Python登場(chǎng) 這次我們來(lái)做一個(gè)自動(dòng)發(fā)送微信的程序,在深夜十二點(diǎn)的時(shí)候給女朋友發(fā)去消息,也算是盡了
    的頭像 發(fā)表于 11-22 09:28 ?1494次閱讀

    10個(gè)殺手級(jí)的Python自動(dòng)腳本分享

    重復(fù)性任務(wù)總是耗時(shí)且無(wú)聊,想想你想要張地裁剪 100 張照片或 Fetch API、糾正拼寫(xiě)和語(yǔ)法等工作,所有這些任務(wù)都很耗時(shí),為什么不自動(dòng)化它們呢?在今天的文章中,我將與你分
    的頭像 發(fā)表于 01-06 15:34 ?762次閱讀

    分享10個(gè)實(shí)用的Python自動(dòng)腳本

    重復(fù)性任務(wù)總是耗時(shí)且無(wú)聊,想想你想要張地裁剪 100 張照片或 Fetch API、糾正拼寫(xiě)和語(yǔ)法等工作,所有這些任務(wù)都很耗時(shí),為什么不自動(dòng)化它們呢?在今天的文章中,我將與你分
    的頭像 發(fā)表于 01-21 15:58 ?1340次閱讀

    利用Python寫(xiě)了個(gè)監(jiān)控服務(wù)器資源利用率的腳本!

    研究了個(gè)腳本,其主要目的是:基于 Python 編程語(yǔ)言來(lái)監(jiān)控服務(wù)器的 CPU、內(nèi)存、/目錄、/appslog、/bigdata目錄使用率以及網(wǎng)卡接收和
    的頭像 發(fā)表于 01-29 15:08 ?733次閱讀

    怎么Python構(gòu)建個(gè)自動(dòng)發(fā)送郵件腳本

    呢? 類似的應(yīng)用場(chǎng)景還有很多,不僅僅是在股票策略提醒上,比如定時(shí)向某些人發(fā)送郵件;網(wǎng)站宕機(jī)了,實(shí)時(shí)發(fā)送郵件提醒;網(wǎng)站負(fù)載過(guò)高,發(fā)送
    的頭像 發(fā)表于 10-31 16:36 ?555次閱讀
    怎么<b class='flag-5'>用</b><b class='flag-5'>Python</b><b class='flag-5'>構(gòu)建</b><b class='flag-5'>一</b><b class='flag-5'>個(gè)</b><b class='flag-5'>自動(dòng)</b><b class='flag-5'>發(fā)送</b><b class='flag-5'>郵件</b>的<b class='flag-5'>腳本</b>

    如何用Python批量定制化發(fā)送郵件

    封精美的元旦祝福郵件,但是郵件的內(nèi)容——比如姓名、祝福語(yǔ)等應(yīng)該怎樣動(dòng)態(tài)渲染呢?答案是jinja2. jinja2 是個(gè)
    的頭像 發(fā)表于 11-01 11:32 ?2214次閱讀

    利用Python發(fā)送郵件的 3 種方式

    Python 發(fā)送郵件的 3 種方式 2. 準(zhǔn)備 以 126 郵箱為例,在編碼之前,我們需要開(kāi)啟 SMTP 服務(wù) 然后,手動(dòng)新增個(gè)授權(quán)碼
    的頭像 發(fā)表于 11-02 11:37 ?973次閱讀

    如何使用Python編寫(xiě)腳本來(lái)自動(dòng)發(fā)送郵件

    Python種非常流行的編程語(yǔ)言,可以用于多種用途,包括自動(dòng)化任務(wù)。其中個(gè)常見(jiàn)的自動(dòng)化任務(wù)
    的頭像 發(fā)表于 12-07 11:36 ?1370次閱讀