1. <strong id="7actg"></strong>
    2. <table id="7actg"></table>

    3. <address id="7actg"></address>
      <address id="7actg"></address>
      1. <object id="7actg"><tt id="7actg"></tt></object>

        最全總結(jié):Python 發(fā)送郵件的幾種方式

        共 3454字,需瀏覽 7分鐘

         ·

        2020-07-27 17:28


        閱讀本文大概需要 3 分鐘。


        1. 前言

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

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

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

        2. 準(zhǔn)備

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

        然后,手動(dòng)新增一個(gè)授權(quán)碼

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

        3. 方式一:smtplib

        smtplib是 Python 自帶的依賴庫(kù),可以直接導(dǎo)入使用
        首先,通過(guò)郵箱賬號(hào)、授權(quán)碼、郵箱服務(wù)器地址初始化一個(gè) SMTP 實(shí)例,然后進(jìn)行連接
        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)建一個(gè)附件對(duì)象
        ????????????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 實(shí)例對(duì)象,將郵件發(fā)送出去
        ?#?收件人列表
        email_to_list?=?['收件人1地址','收件人2地址']

        #?發(fā)送郵件
        #?注意:此處必須同時(shí)指定發(fā)件人與收件人,否則會(huì)當(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 項(xiàng)目創(chuàng)建目的是,使郵件處理變得更簡(jiǎn)單

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

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

        首先,安裝依賴庫(kù)

        #?安裝依賴庫(kù)
        pip3?install?zmail

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

        class?ZMailObject(object):

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

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

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

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

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

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

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

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

        5. 方式三:yagmail

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

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

        首先,安裝依賴庫(kù)

        #?安裝依賴庫(kù)
        pip3?install?yagmail

        然后,通過(guò)賬號(hào)、授權(quán)碼和服務(wù)器地址連接郵箱服務(wù)器,返回一個(gè)服務(wù)對(duì)象

        import?yagmail

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

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

        #?發(fā)送對(duì)象列表
        email_to?=?['**@qq.com',?]
        email_title?=?'測(cè)試報(bào)告'
        email_content?=?"這是測(cè)試報(bào)告的具體內(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 種方式,實(shí)際項(xiàng)目中,更推薦使用后兩種方式


        推薦閱讀

        1

        Python 為什么用 # 號(hào)作注釋符?

        2

        華為搜索引擎面世!

        3

        Docker 中運(yùn)行 Pyppeteer 的那些坑

        4??

        GitHub 上的這個(gè)開(kāi)源項(xiàng)目也太有創(chuàng)意了吧!




        崔慶才

        靜覓博客博主,《Python3網(wǎng)絡(luò)爬蟲(chóng)開(kāi)發(fā)實(shí)戰(zhàn)》作者

        隱形字

        個(gè)人公眾號(hào):進(jìn)擊的Coder

        長(zhǎng)按識(shí)別二維碼關(guān)注





        好文和朋友一起看~
        瀏覽 47
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        評(píng)論
        圖片
        表情
        推薦
        點(diǎn)贊
        評(píng)論
        收藏
        分享

        手機(jī)掃一掃分享

        分享
        舉報(bào)
        1. <strong id="7actg"></strong>
        2. <table id="7actg"></table>

        3. <address id="7actg"></address>
          <address id="7actg"></address>
          1. <object id="7actg"><tt id="7actg"></tt></object>
            韩国一级在线 | 久久在线 | 精品黄片视频 | 俺来俺也去www色在线观看 | 18XXXX亚洲HD护士JD | 大焦煮伊人 | 亚洲精品国产麻豆 | 一区二区三区入口 | 偷窥视频 | 被戴sm刑具尽调教室虐男视频 |