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

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

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

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

科技綠洲 ? 來源:Python實用寶典 ? 作者:Python實用寶典 ? 2023-11-02 11:37 ? 次閱讀

1. 前言

郵件,作為最正式規(guī)范的溝通方式,在日常辦公過程中經(jīng)常被用到

我們都知道 Python內(nèi)置了對 SMTP 的支持,可以發(fā)送純文本、富文本、HTML 等格式的郵件

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

2. 準(zhǔn)備

以 126 郵箱為例,在編碼之前,我們需要開啟 SMTP 服務(wù)

然后,手動新增一個授權(quán)碼

其中,賬號、授權(quán)碼和服務(wù)器地址用于連接登錄郵箱服務(wù)器

3. 方式一:smtplib

smtplib是 Python 自帶的依賴庫,可以直接導(dǎo)入使用

首先,通過郵箱賬號、授權(quán)碼、郵箱服務(wù)器地址初始化一個 SMTP 實例,然后進行連接

def __init__(self):
    # 初始化
    self.smtp = smtplib.SMTP()

    # 連接郵箱服務(wù)器地址
    self.smtp.connect('smtp.126.com')

    # 加入主題和附件,郵件體
    self.email_body = MIMEMultipart('mixed')

    # 發(fā)件人地址及授權(quán)碼
    self.email_from_username = '**@126.com'
    self.email_from_password = '授權(quán)碼'

# 登錄
self.smtp.login(self.email_from_username, self.email_from_password)

然后,將收件人列表、郵件標(biāo)題、郵件正文內(nèi)容、附件路徑及附件文件名加入到上面定義的郵件體中

def generate_email_body(self, email_to_list, email_title, email_content, attchment_path, files):
    """
    組成郵件體
    :param email_to_list:收件人列表
    :param email_title:郵件標(biāo)題
    :param email_content:郵件正文內(nèi)容
    :param attchment_path:附件的路徑
    :param files:附件文件名列表
    :return:
    """
    self.email_body['Subject'] = email_title
    self.email_body['From'] = self.email_from_username
    self.email_body['To'] = ",".join(email_to_list)

    for file in files:
        file_path = attchment_path + '/' + file
        if os.path.isfile(file_path):
            # 構(gòu)建一個附件對象
            att = MIMEText(open(file_path, 'rb').read(), 'base64', 'utf-8')
            att["Content-Type"] = 'application/octet-stream'
            att.add_header("Content-Disposition", "attachment", filename=("gbk", "", file))
            self.email_body.attach(att)

    text_plain = MIMEText(email_content, 'plain', 'utf-8')
    self.email_body.attach(text_plain)

接著,就可以使用 SMTP 實例對象,將郵件發(fā)送出去

# 收件人列表
email_to_list = ['收件人1地址','收件人2地址']

# 發(fā)送郵件
# 注意:此處必須同時指定發(fā)件人與收件人,否則會當(dāng)作垃圾郵件處理掉
self.smtp.sendmail(self.email_from_username, email_to_list, self.email_body.as_string())

郵件發(fā)送完畢之后,退出服務(wù)即可

def exit(self):
    """
    退出服務(wù)
    :return:
    """
    self.smtp.quit()

4. 方式二:zmail

Zmail 項目創(chuàng)建目的是,使郵件處理變得更簡單

使用 Zmail 發(fā)送接收郵件方便快捷,不需要手動添加服務(wù)器地址、端口以及適合的協(xié)議,可以輕松創(chuàng)建 MIME 對象和頭文件

注意:Zmail 僅支持 Python3,不支持 Python2

首先,安裝依賴庫

# 安裝依賴庫
pip3 install zmail

然后,使用郵箱賬號、授權(quán)碼創(chuàng)建一個郵箱服務(wù)對象

class ZMailObject(object):

    def __init__(self):
        # 郵箱賬號
        self.username = '**@126.com'

        # 郵箱授權(quán)碼
        self.authorization_code = '授權(quán)碼'

        # 構(gòu)建一個郵箱服務(wù)對象
        self.server = zmail.server(self.username, self.authorization_code)

接著,將郵件主題、郵件內(nèi)容、包含的附件路徑加入到一個字典中,組成郵件主體

# 郵件主體
mail_body = {
        'subject': '測試報告',
        'content_text': '這是一個測試報告',  # 純文本或者HTML內(nèi)容
        'attachments': ['./attachments/report.png'],
}

最后,將調(diào)用send_mail()函數(shù),將郵件發(fā)送出去即可

# 收件人
# 可以指定一個人,字符串;也可以是多個人,列表
mail_to = "收件人1"

# 發(fā)送郵件
self.server.send_mail(mail_to, mail_body)

5. 方式三:yagmail

yagmail 只需要幾行代碼,就能實現(xiàn)發(fā)送郵件的功能

相比 zmail,yagmail 實現(xiàn)發(fā)送郵件的方式更加簡潔優(yōu)雅

首先,安裝依賴庫

# 安裝依賴庫
pip3 install yagmail

然后,通過賬號、授權(quán)碼和服務(wù)器地址連接郵箱服務(wù)器,返回一個服務(wù)對象

import yagmail

# 連接服務(wù)器
# 用戶名、授權(quán)碼、服務(wù)器地址
yag_server = yagmail.SMTP(user='**@126.com', password='授權(quán)碼', host='smtp.126.com')

接著,通過 send() 函數(shù),將郵件發(fā)送出去

# 發(fā)送對象列表
email_to = ['**@qq.com', ]
email_title = '測試報告'
email_content = "這是測試報告的具體內(nèi)容"
# 附件列表
email_attachments = ['./attachments/report.png', ]

# 發(fā)送郵件
yag_server.send(email_to, email_title, email_content, email_attachments)

郵件發(fā)送完畢之后,關(guān)閉連接即可

# 關(guān)閉連接
yag_server.close()

6. 最后

上面總結(jié)了 Python 發(fā)送郵件的 3 種方式,實際項目中,更推薦使用后兩種方式。

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

    關(guān)注

    12

    文章

    9184

    瀏覽量

    85490
  • 編碼
    +關(guān)注

    關(guān)注

    6

    文章

    944

    瀏覽量

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

    關(guān)注

    0

    文章

    32

    瀏覽量

    18815
  • HTML
    +關(guān)注

    關(guān)注

    0

    文章

    278

    瀏覽量

    35481
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4797

    瀏覽量

    84729
收藏 人收藏

    評論

    相關(guān)推薦

    在Java中如何使用API來完成郵件的接收與發(fā)送

    的接收與發(fā)送。 通過該篇文章我們可以有如下收獲: 了解基于Java的電子郵件客戶端的實現(xiàn)方式 了解常見的郵箱如何集成 認識郵箱中的IMAP與POP協(xié)議 適用場景 郵件和短信很像,將信息
    的頭像 發(fā)表于 09-30 14:09 ?3453次閱讀
    在Java中如何使用API來完成<b class='flag-5'>郵件</b>的接收與<b class='flag-5'>發(fā)送</b>

    電子郵件的使用培圳教程

    當(dāng)天就能收到對方發(fā)來的郵件。 二、郵件的異步傳輸   電話通信是一同步通信,即通話雙方必須同時在電話機旁且電話必須是空閑的。而電子郵件則是以一
    發(fā)表于 03-10 17:55

    5Python實現(xiàn)方式詳解

    python就是是一面向?qū)ο蟮慕忉屝陀嬎銠C程序設(shè)計語言,具有豐富和強大的庫,語言因其簡潔性、易讀性以及可擴展性受到歡迎。python可用于圖形處理、數(shù)學(xué)處理、文本處理、數(shù)據(jù)庫編程、網(wǎng)絡(luò)編程、Web
    發(fā)表于 05-22 15:52

    Labview發(fā)送notes郵件

    請前輩點撥如何用labview發(fā)送notes郵件,公司用這個郵件系統(tǒng),但是通過用例的方式是無法發(fā)出郵件的,求教
    發(fā)表于 07-21 09:43

    C#教程之調(diào)用Outlook發(fā)送郵件

    C#教程之調(diào)用Outlook發(fā)送郵件,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 15:27 ?4次下載

    C#教程之調(diào)用SMTP發(fā)送有附件的郵件

    C#教程之調(diào)用SMTP發(fā)送有附件的郵件,很好的C#資料,快來學(xué)習(xí)吧。
    發(fā)表于 04-20 15:27 ?16次下載

    如何向您選擇的某人發(fā)送電子郵件

    您可以通過單擊左側(cè)的“發(fā)送”選項卡來確認您的電子郵件是否已發(fā)送。它將顯示您發(fā)送的所有電子郵件。如果未顯示最近
    的頭像 發(fā)表于 12-13 16:35 ?5049次閱讀
    如何向您選擇的某人<b class='flag-5'>發(fā)送電子郵件</b>

    使用Python向Telegram用戶發(fā)送消息

    電子發(fā)燒友網(wǎng)站提供《使用Python向Telegram用戶發(fā)送消息.zip》資料免費下載
    發(fā)表于 11-24 10:49 ?0次下載
    使用<b class='flag-5'>Python</b>向Telegram用戶<b class='flag-5'>發(fā)送</b>消息

    基于SpringBoot實現(xiàn)郵件發(fā)送

    本項目通過Springboot發(fā)送email郵件,包括普通文本郵件 、HTML內(nèi)容板式郵件 、包含靜態(tài)資源郵件以及帶附件
    的頭像 發(fā)表于 02-28 14:58 ?1265次閱讀
    基于SpringBoot實現(xiàn)<b class='flag-5'>郵件</b><b class='flag-5'>發(fā)送</b>

    如何用python發(fā)送接收郵件

    SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議,它是一組用于由源地址到目的地址傳送郵件的規(guī)則,由它來控制信件的中轉(zhuǎn)方式。
    的頭像 發(fā)表于 07-11 09:30 ?948次閱讀
    如何用<b class='flag-5'>python</b><b class='flag-5'>發(fā)送</b>接收<b class='flag-5'>郵件</b>

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

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

    Python調(diào)用JS的 4 方式

    Python 實現(xiàn) 本文將聊聊利用 Python 調(diào)用 JS 的4方式 2. 準(zhǔn)備 以一段簡單的 JS 腳本為例,將代碼寫入到文件中
    的頭像 發(fā)表于 10-30 09:41 ?723次閱讀

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

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

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

    現(xiàn)實生活中,如果只是發(fā)郵件給自己,像上一篇文章那樣簡陋的格式是可以接受的,但若要針對每個人進行郵件的定制化,群發(fā)給公司客戶、內(nèi)部員工、親戚朋友,則需更加高級的郵件發(fā)送
    的頭像 發(fā)表于 11-01 11:32 ?2214次閱讀

    如何使用Python編寫腳本來自動發(fā)送郵件

    Python是一非常流行的編程語言,可以用于多種用途,包括自動化任務(wù)。其中一個常見的自動化任務(wù)是自動發(fā)送郵件。在本文中,我們將介紹如何使用Pyth
    的頭像 發(fā)表于 12-07 11:36 ?1370次閱讀