<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>

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

          共 3603字,需瀏覽 8分鐘

           ·

          2021-01-15 17:42





          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 種方式,實際項目中,更推薦使用后兩種方式。




          菜鳥編程大本營,已經(jīng)正式上線

          專注于分享趣味的編程技巧,不限于Java, Python ,Go, Javascript等語言,讓菜鳥愛上編程,進階成為高手,歡迎關(guān)注。



          菜鳥編程本營,從菜鳥進階高手


          爆款文案


          點這里,獲取新手福利


          瀏覽 34
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

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

          手機掃一掃分享

          分享
          舉報
          <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>
                  欧美一级二级三级视频 | 麻豆人妻精品无码区 | 18禁黄网站免费 | 一级黄片乱伦 | 欧洲性爱视频在线 |