整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          用 Python 發一波郵件,效果杠杠滴

          用 Python 發一波郵件,效果杠杠滴

          些項目可能需要我們通過代碼的方式來發送郵件,比如在后臺給客戶批量發送郵件,或者,我們也可以通過代碼給自己發送提醒郵件,比如觸發了某些事件需要我們親自去操作的時候,就可以使用代碼直接給自己發送一封預警郵件等等。

          那么,如何使用 Python 來發送郵件呢?

          在此之前,我們先來簡單的了解一下:

          什么是 SMTP?

          我們知道在互聯網中常用的協議是 HTTP,這樣我們的瀏覽器才能獲取到服務器的網頁內容,同樣的 SMTP 也是一種常見的互聯網應用層傳輸協議,不同的是,這種類型是專門用來處理郵件的。

          一般情況下,你在發送郵件的時候,并不是直接就把你寫的內容發送到對方的收件箱中,它會先發送給 smtp 服務器進行處理,然后發送到對應的服務器中,比如 Gmail,然后 Gmail 就會下載郵件,把它放到收件人的郵箱里面去。

          在 Python 中有一個 smtpd 模塊,我們可以使用它在本地開啟一個 SMTP 服務,像這樣:

          python -m smtpd -c DebuggingServer -n localhost:1088

          這樣我們就可以在本地測試郵件的發送了。

          當然,我們并不需要自己創建 SMTP 服務,不同的郵件廠商都有提供它們的 STMP 服務地址,比如 Gmail 的就是 smtp.gmail.com:

          Python 發送郵件

          知道了什么是 smtp 之后,我們就可以使用 Python 來發送郵件了。

          在 Python 中有一個內置的 smtplib 庫,你可以使用它來連接 smtp 服務器,像剛剛小帥b給你看到的本地測試,發送信息給 stmp 服務就是這樣操作的:

          smtpObj=smtplib.SMTP(host='localhost',port=1088
          smtpObj.sendmail(sender_mail,receivers_mail, message)

          我們在發送郵件的時候,是有一定的標準的,它怎么去區分要發的內容是純文本,還是含有 HTML,或者是附件呢,所以有一個 MIME 的標準,通過這個標準我們可以指定發送不同的郵件類型。

          在 Python 里面有一個 email 庫,我們可以使用它來構造 MIME massgae,然后通過 smtplib 來發送。

          from email.mime.multipart
          import MIMEMultipart
          from email.mime.text import MIMEText

          接下來,我們來使用 Python 在 Gmail 給別人發送一個「帥b老仙來啦」的純文本郵件試試吧。

          因為我們要使用的是 Gmail ,所以有兩個點需要先注意一下,第一個你懂的,需要做一下代理,你可以先安裝一波 PySocks,然后這樣來讓 smtp 使用 socks 代理:

          import socks
          socks.setdefaultproxy(socks.PROXY_TYPE_SOCKS5, '127.0.0.1', 1080)
          socks.wrapmodule(smtplib)

          第二個是 Google 為了你的安全,不會輕易讓你在別的地方登陸你的 Gmail 賬號,所以你需要在設置那里,把低安全性應用訪問權限打開。

          Python 發送純文本郵件內容

          好了,導入相關的庫并開啟代理:

          定義好你的收發郵件地址,以及你要發的內容:

          構造 MIME:

          連接 Gamil 的 smtp 服務,開啟 tls 加密,登陸然后發送一波:

          運行一波,沒什么問題的話對方就會收到你發的郵件啦:

          Python 發送 HTML 郵件內容

          剛剛,我們這里 「MIMEText(content, 'plain', 'utf-8')」中指定的是 plain,說明郵件是純文本,那么如果我們要發送的郵件內容是 HTML 呢?

          我們只需要定義 HTML 語言,然后在 MIMEText 傳入 html 就可以了,像這樣:

          這樣收到的郵件就是 HTML 的內容了:

          一行代碼發送郵件

          如果你和我一樣用的是 Gmail,那我還要告訴你一個不錯的東西,有一個第三方庫封裝好了的 Python 郵件發送,你甚至可以一行代碼實現郵件的發送。

          安裝:

          pip install yagmail

          發送:

          yagmail.SMTP(me,password).send(to, '帥b來啦!!', '來了來了')

          結果:

          你還可以使用它快速實現批量發送,像這樣:

          ok,以上就是小帥b今天給你帶來的分享,希望對你有幫助,那么我們下回見,peace

          為數據分析師,經常性的會需要到服務器上做一些取數/數據清洗的工作,但往往這些工作會特別耗時,如果我們可以在我們的腳本中加入郵件提醒的功能,提醒我們任務完成,那效率會提升很多

          一般發郵件方法

          我以前在通過Python實現自動化郵件功能的時候是這樣的:

          import smtplib
          from email.mime.text import MIMEText
          from email.header import Header
          # 發送郵箱服務器
          smtpserver='smtp.sina.com'
          # 發送郵箱用戶/密碼
          user='username@sina.com'
          password='123456'
          # 發送郵箱
          sender='username@sina.com'
          # 接收郵箱
          receiver='receive@126.com'
          # 發送郵件主題
          subject='Python email test'
          # 編寫HTML類型的郵件正文
          msg=MIMEText('<html><h1>你好!</h1></html>','html','utf-8')
          msg['Subject']=Header(subject, 'utf-8')
          # 連接發送郵件
          smtp=smtplib.SMTP()
          smtp.connect(smtpserver)
          smtp.login(user, password)
          smtp.sendmail(sender, receiver, msg.as_string())
          smtp.quit()
          

          其實,這段代碼也并不復雜,只要你理解使用過郵箱發送郵件,那么以下問題是你必須要考慮的:

          • 你登錄的郵箱帳號/密碼
          • 對方的郵箱帳號
          • 郵件內容(標題,正文,附件)
          • 郵箱服務器(SMTP.xxx.com/pop3.xxx.com)

          yagmail 實現發郵件

          • yagmail 可以更簡單的來實現自動發郵件功能。
          github項目地址: https://github.com/kootenpv/yagmail
          
          • 安裝
          pip install yagmail 
          
          • 簡單例子
          import yagmail
          #鏈接郵箱服務器
          yag=yagmail.SMTP( user="user@126.com", password="1234", host='smtp.126.com')
          # 郵箱正文
          contents=['This is the body, and here is just text http://somedomain/image.png',
           'You can find an audio file attached.', '/local/path/song.mp3']
          # 發送郵件
          yag.send('taaa@126.com', 'subject', contents)
          

          總共四行代碼搞定,是不是比上面的例子簡單太多了。

          • 給多個用戶發送郵件,只需要將接收郵箱 變成一個list即可。
          yag.send(['aa@126.com','bb@qq.com','cc@gmail.com'], 'subject', contents)
          
          • 發送帶附件的郵件,只需要添加要發送的附件列表即可

          本文的文字及圖片來源于網絡,僅供學習、交流使用,不具有任何商業用途,版權歸原作者所有,如有問題請及時聯系我們以作處理。

          作者:星安果

          PS:如有需要Python學習資料的小伙伴可以加點擊下方鏈接自行獲取

          http://t.cn/A6Zvjdun

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

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

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

          準備

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

          然后,手動新增一個授權碼

          其中,賬號、授權碼和服務器地址用于連接登錄郵箱服務器

          方式一:smtplib

          smtplib是 Python 自帶的依賴庫,可以直接導入使用首先,通過郵箱賬號、授權碼、郵箱服務器地址初始化一個 SMTP 實例,然后進行連接

          def __init__(self):
              # 初始化
              self.smtp=smtplib.SMTP()
          
              # 連接郵箱服務器地址
              self.smtp.connect('smtp.126.com')
          
              # 加入主題和附件,郵件體
              self.email_body=MIMEMultipart('mixed')
          
              # 發件人地址及授權碼
              self.email_from_username='**@126.com'
              self.email_from_password='授權碼'
          
          # 登錄
          self.smtp.login(self.email_from_username, self.email_from_password)
          

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

          def generate_email_body(self, email_to_list, email_title, email_content, attchment_path, files):
              """
              組成郵件體
              :param email_to_list:收件人列表
              :param email_title:郵件標題
              :param email_content:郵件正文內容
              :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):
                      # 構建一個附件對象
                      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 實例對象,將郵件發送出去

           # 收件人列表
          email_to_list=['收件人1地址','收件人2地址']
          
          # 發送郵件
          # 注意:此處必須同時指定發件人與收件人,否則會當作垃圾郵件處理掉
          self.smtp.sendmail(self.email_from_username, email_to_list, self.email_body.as_string())
          

          郵件發送完畢之后,退出服務即可

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

          方式二:zmail

          Zmail 項目創建目的是,使郵件處理變得更簡單

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

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

          首先,安裝依賴庫

          # 安裝依賴庫
          pip3 install zmail
          

          然后,使用郵箱賬號、授權碼創建一個郵箱服務對象

          class ZMailObject(object):
          
              def __init__(self):
                  # 郵箱賬號
                  self.username='**@126.com'
          
                  # 郵箱授權碼
                  self.authorization_code='授權碼'
          
                  # 構建一個郵箱服務對象
                  self.server=zmail.server(self.username, self.authorization_code)
          

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

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

          最后,將調用send_mail()函數,將郵件發送出去即可

          # 收件人
          # 可以指定一個人,字符串;也可以是多個人,列表
          mail_to="收件人1"
          
          # 發送郵件
          self.server.send_mail(mail_to, mail_body)
          

          方式三:yagmail

          yagmail 只需要幾行代碼,就能實現發送郵件的功能

          相比 zmail,yagmail 實現發送郵件的方式更加簡潔優雅

          首先,安裝依賴庫

          # 安裝依賴庫
          pip3 install yagmail
          

          然后,通過賬號、授權碼和服務器地址連接郵箱服務器,返回一個服務對象

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

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

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

          郵件發送完畢之后,關閉連接即可

          # 關閉連接
          yag_server.close()
          

          代碼

          email_by_zmail.py

          import zmail
          
          
          class ZMailObject(object):
          
              def __init__(self):
                  # 郵箱賬號
                  self.username='**@126.com'
          
                  # 郵箱授權碼
                  self.authorization_code='授權碼'
          
                  # 構建一個郵箱服務對象
                  self.server=zmail.server(self.username, self.authorization_code)
          
              def send_email(self, mail_to, mail_body):
                  """
                  發送郵件
                  :param mail_to 發送對象
                  :param mail: 發送主題、內容及附件
                  :return:
                  """
          
                  if self.__check_pop_enable() and self.__check_smtp_enable():
                      self.server.send_mail(mail_to, mail_body)
                  else:
                      pass
          
              def receive_email(self):
                  """
                  接受郵件
                  :return:
                  """
                  try:
                      # 接受郵件
                      last_mail=self.server.get_latest()
                      # last_mail=self.server.get_mail(2)
                      # zmail.show(last_mail)
                      for k, v in last_mail.items():
                          print(k, v)
                  except Exception as e:
                      # 收件箱為空,則會報錯
                      print('接受異常異常')
          
              def __check_smtp_enable(self):
                  """
                  檢查smtp是否正常
                  :return:
                  """
                  return self.server.smtp_able()
          
              def __check_pop_enable(self):
                  """
                  檢查pop功能是否正常
                  :return:
                  """
                  return self.server.pop_able()
          
          
          if __name__=='__main__':
              zmail_obj=ZMailObject()
          
              # 發送內容及附件
              mail_to='**@qq.com'
          
              # 郵件主體
              mail_body={
                  'subject': '測試報告',
                  'content_text': '這是一個測試報告',  # 純文本或者HTML內容
                  'attachments': ['./attachments/report.png'],
              }
          
              # 發送郵件
              zmail_obj.send_email(mail_to, mail_body)
          
              # 接受郵件
              # zmail_obj.receive_email()
          

          email_by_yagmail.py

          import yagmail
          
          # 連接服務器
          # 用戶名、授權碼、服務器地址
          yag_server=yagmail.SMTP(user='**@126.com', password='授權碼', host='smtp.126.com')
          
          # 發送郵件
          # 發送對象列表
          email_to=['**@qq.com', ]
          email_title='測試報告'
          email_content="這是測試報告的具體內容"
          # 附件列表
          email_attachments=['./attachments/report.png', ]
          yag_server.send(email_to, email_title, email_content, email_attachments)
          
          # 關閉連接
          yag_server.close()
          

          email_by_smtplib.py


          主站蜘蛛池模板: 精品无码人妻一区二区免费蜜桃 | 日韩人妻精品一区二区三区视频| 亚洲日本一区二区三区在线| 国产在线视频一区| 亚洲色大成网站www永久一区| 成人国产精品一区二区网站公司 | 精品亚洲AV无码一区二区| 国产在线精品一区二区在线看| 亚洲一区二区三区免费观看| 亚洲国产成人精品久久久国产成人一区二区三区综 | 国产精品被窝福利一区| AV无码精品一区二区三区宅噜噜| 精品国产日韩亚洲一区在线| 亚洲国产精品一区二区久| 无码人妻少妇色欲AV一区二区| 国产色情一区二区三区在线播放 | 八戒久久精品一区二区三区| 精品不卡一区二区| 精品熟人妻一区二区三区四区不卡| 成人精品视频一区二区三区 | 亚洲bt加勒比一区二区| 亚洲乱色熟女一区二区三区丝袜| 夜夜添无码试看一区二区三区| 久久国产三级无码一区二区| 三上悠亚亚洲一区高清| 一区二区三区杨幂在线观看| 亚洲AV无码一区二区三区在线观看 | 国产免费一区二区三区在线观看| 成人在线观看一区| 国产成人一区二区三区免费视频 | 日本精品啪啪一区二区三区| 国产中文字幕一区| 国产成人高清视频一区二区| 国产高清精品一区| 国产精品无码一区二区三级| 国偷自产av一区二区三区| 亚洲一区二区成人| 在线精品亚洲一区二区| 在线精品亚洲一区二区| 人妻激情偷乱视频一区二区三区| 蜜臀Av午夜一区二区三区|