最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于python SMTP實(shí)現(xiàn)自動(dòng)發(fā)送郵件教程解析

 更新時(shí)間:2020年06月02日 09:07:58   作者:鄭靜174  
這篇文章主要介紹了基于python實(shí)現(xiàn)自動(dòng)發(fā)送郵件教程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下

最近工作中的一個(gè)項(xiàng)目需要自動(dòng)發(fā)送一些信息郵件到指定郵箱的需求,那么如何實(shí)現(xiàn)Python自動(dòng)發(fā)送郵件的功能呢?接下來我們就來簡單的介紹下如何利用Python來實(shí)現(xiàn)自動(dòng)發(fā)送郵件的功能。

Python SMTP發(fā)送郵件

SMTP(Simple Mail Transfer Protocol)即簡單郵件傳輸協(xié)議 ,說白了就是發(fā)送郵件的協(xié)議,python的smplib庫對(duì)SMTP協(xié)議進(jìn)行了簡單的封裝,提供了對(duì)SMTP的支持,可以發(fā)送純文本郵件、HTML文件以及帶附件的郵件。

首先我們構(gòu)建一個(gè)SendEmailManager類,也是遵循著面向?qū)ο缶幊痰乃枷雭碜觯篌w結(jié)構(gòu)如下:

class SendEmailManager(object):

  def __init__(self, **kwargs):
    # 初始化參數(shù)
    ...

  def _get_conf(self, key):
    # 獲取配置參數(shù)
    ...

  def _init_conf(self):
    # 初始化配置參數(shù)
    ...

  def _login_email(self):
    # 登錄郵箱服務(wù)器
    ...
  def _make_mail_msg(self):
    # 構(gòu)建文本郵件對(duì)象
    ...

  def do_send_mail(self):
    # 郵件發(fā)送
    ...

def __init__(self, **kwargs)

類的初始化函數(shù),可以用來設(shè)置對(duì)象屬性,并給予初始值,可以是參數(shù)或者固定值 ,其中參數(shù)**kwargs是將一個(gè)可變的關(guān)鍵字參數(shù)的字典傳給函數(shù)實(shí)參,這里里我們主要是對(duì)SMTP服務(wù)器(這里使用qq郵箱)、發(fā)送郵件的代理郵箱、在郵箱中設(shè)置的客戶端授權(quán)密碼、可變參數(shù)進(jìn)行一些初始化。具體代碼如下:

# SMTP服務(wù)器,這里使用qq郵箱,其他郵箱自行百度
EMAIL_HOST = 'smtp.qq.com'
# 發(fā)送郵件的代理郵箱
EMAIL_HOST_USER = 'xxxx@xxxx.com'
# 在郵箱中設(shè)置的客戶端授權(quán)密碼, 注意這里不是郵箱密碼,如何獲取郵箱授權(quán)碼,請(qǐng)看本文最后教程
EMAIL_HOST_PASSWORD = 'xxxxxxxxxxxxx'
def __init__(self, **kwargs):
  # 初始化參數(shù)
  self.email_host = EMAIL_HOST
  self.email_host_user = EMAIL_HOST_USER
  self.email_host_pass = EMAIL_HOST_PASSWORD
  self.kwargs = kwargs

def _get_conf(self, key)

主要負(fù)責(zé)通過key讀取 可變參數(shù)self.kwargs 字典里的值,供其他函數(shù)使用。

def _get_conf(self, key):
  # 獲取配置參數(shù)
  value = self.kwargs.get(key)
  if key != "attach_file_list" and (value is None or value == ''):
    raise Exception("configuration parameter '%s' cannot be empty" % key)
  return value

def _init_conf(self)

該函數(shù)主要負(fù)責(zé)初始化 函數(shù)_get_conf 返回的配置參數(shù), 以便接下來的函數(shù)可以調(diào)用相關(guān)配置參數(shù)。

def _init_conf(self):
  # 初始化配置參數(shù)
  print(self._get_conf('receives'))
  self.receives = self._get_conf('receives')
  self.msg_subject = self._get_conf('msg_subject')
  self.msg_content = self._get_conf('msg_content')
  self.msg_from = self._get_conf('msg_from')
  # attachment
  self.attach_file_list = self._get_conf('attach_file_list')

def _login_email(self)

登錄郵件服務(wù)器, 我這里登陸的是qq郵箱的服務(wù)器,端口號(hào)為465,其他郵箱端口號(hào)請(qǐng)自行百度,代碼如下:

def _login_email(self):
  # 登錄郵箱服務(wù)器
  try:
    server = smtplib.SMTP_SSL(self.email_host, port=465)
    # set_debuglevel(1)可以打印出和SMTP服務(wù)器交互的所有信息
    server.set_debuglevel(1)
    # 登錄郵箱
    server.login(self.email_host_user, self.email_host_pass)
    return server
  except Exception as e:
    print("mail login exception:", e)
    raise e

def _make_mail_msg(self)

該函數(shù)的功能為構(gòu)建一個(gè)郵件實(shí)例對(duì)象,來處理郵件的內(nèi)容。一封正常的郵件一般有收發(fā)件者信息,郵件主題,郵件正文,有些郵件還附帶有附件,具體的設(shè)置參見如下代碼:

def _make_mail_msg(self):
  # 構(gòu)建郵件對(duì)象
  msg = MIMEMultipart()
  msg.attach(MIMEText(self.msg_content, 'plain', 'utf-8'))
  # 郵件主題
  msg['Subject'] = Header(self.msg_subject, "utf-8")
  # 發(fā)件人郵箱信息
  msg['From'] = "<%s>" % self.msg_from
  # msg['From'] = Header(self.msg_from + "<%s>" % self.email_host_user, "utf-8")
  msg['To'] = ",".join(self.receives)
  print("---", self.attach_file_list)
  if self.attach_file_list:
    for i, att in enumerate(self.attach_file_list):
      # 構(gòu)造附件,傳送當(dāng)前目錄下的文件
      if not att:
        break
      att_i = MIMEText(open(att, 'rb').read(), 'base64', 'utf-8')
      att_i["Content-Type"] = 'application/octet-stream'
      # 這里的filename可以任意寫,寫什么名字,郵件中顯示什么名字
      att_i["Content-Disposition"] = 'attachment; filename="%s"' % att
      msg.attach(att_i)
  return msg

def do_send_mail(self)

發(fā)送郵件,就是把上幾個(gè)函數(shù)串起來,直接上代碼:

def do_send_mail(self):
  # 郵件發(fā)送
  try:
    self._init_conf()
    server = self._login_email()
    msg = self._make_mail_msg()
    server.sendmail(self.email_host_user, self.receives, msg.as_string())
    server.close()
    print("發(fā)送成功!")
  except Exception as e:
    print("郵件發(fā)送異常", e)

配置參數(shù),測試能否正常發(fā)送郵件:

if __name__ == "__main__":
  mail_conf = {
    'msg_from': 'xxxx@qq.com', # 郵件發(fā)送者的地址
    'receives': ['xxxx@qq.com', 'xxxxxxxx@xxxx.com', ], # 郵件接收者的地址,這是個(gè)list,因?yàn)猷]件的接收者可能不止一個(gè)
    'msg_subject': 'Python 自動(dòng)發(fā)送郵件測試!!', # 郵件的主題
    'msg_content': '人生苦短,我用python!!!', # 郵件的內(nèi)容
    'attach_file_list': {"test_file1.py": "test.py", "test_file2.pem": "./public.pem"}, # 為附件文件路徑列表,也是個(gè)list,也可沒有這項(xiàng)
  }

  manager = SendEmailManager(**mail_conf)
  manager.do_send_mail()


ok,發(fā)送成功,添加附件也是沒問題的。

開始我們講的獲取客戶端郵箱的授權(quán)碼,教程如下(以qq郵箱為例):

好了,目標(biāo)完成。

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Python Socket傳輸文件示例

    Python Socket傳輸文件示例

    這篇文章主要介紹了Python Socket傳輸文件示例,發(fā)送端可以不停的發(fā)送新文件,接收端可以不停的接收新文件。有興趣的可以了解一下。
    2017-01-01
  • django之對(duì)FileField字段的upload_to的設(shè)定方法

    django之對(duì)FileField字段的upload_to的設(shè)定方法

    今天小編就為大家分享一篇django之對(duì)FileField字段的upload_to的設(shè)定方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2019-07-07
  • Python制作詞云的方法

    Python制作詞云的方法

    這篇文章主要為大家詳細(xì)介紹了Python制作詞云的方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-01-01
  • Python機(jī)器學(xué)習(xí)之決策樹算法實(shí)例詳解

    Python機(jī)器學(xué)習(xí)之決策樹算法實(shí)例詳解

    這篇文章主要介紹了Python機(jī)器學(xué)習(xí)之決策樹算法,較為詳細(xì)的分析了實(shí)例詳解機(jī)器學(xué)習(xí)中決策樹算法的概念、原理及相關(guān)Python實(shí)現(xiàn)技巧,需要的朋友可以參考下
    2017-12-12
  • Python 函數(shù)簡單易理解版

    Python 函數(shù)簡單易理解版

    本文將用簡單易解的描述方法對(duì)Python 函數(shù)做一個(gè)詳情介紹,感興趣的朋友可以參考下文
    2021-08-08
  • pycharm 使用心得(二)設(shè)置字體大小

    pycharm 使用心得(二)設(shè)置字體大小

    pycharm 是很好的一個(gè)IDE,在windows下,和macOS下,都能很好的運(yùn)行。唯一缺點(diǎn)是啟動(dòng)慢。默認(rèn)字體太小,在mac下,需要瞪大24K氪金狗眼才能看清。 為了保護(hù)好眼睛,我們需要把字體調(diào)整大一些:
    2014-06-06
  • Python3+Requests+Excel完整接口自動(dòng)化測試框架的實(shí)現(xiàn)

    Python3+Requests+Excel完整接口自動(dòng)化測試框架的實(shí)現(xiàn)

    這篇文章主要介紹了Python3+Requests+Excel完整接口自動(dòng)化測試框架的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-10-10
  • Django超詳細(xì)講解圖書管理系統(tǒng)的實(shí)現(xiàn)

    Django超詳細(xì)講解圖書管理系統(tǒng)的實(shí)現(xiàn)

    前段時(shí)間翻文件發(fā)現(xiàn)了以前學(xué)習(xí)python和django時(shí)做的一個(gè)系統(tǒng),當(dāng)時(shí)的想法是將這玩意做出來應(yīng)付web開發(fā)大作業(yè)、課程設(shè)計(jì)作業(yè)甚至是畢設(shè)用的,實(shí)際上也確實(shí)應(yīng)付了課程設(shè)計(jì),功能雖然不算多,但是應(yīng)付課程設(shè)計(jì)或者大作業(yè)綽綽有余了
    2022-07-07
  • Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫

    Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫

    這篇文章主要介紹了Python基礎(chǔ)之操作MySQL數(shù)據(jù)庫,文中有非常詳細(xì)的代碼示例,對(duì)正在學(xué)習(xí)python基礎(chǔ)的小伙伴們有非常好的幫助,需要的朋友可以參考下
    2021-05-05
  • 使用 Python 實(shí)現(xiàn)微信公眾號(hào)粉絲遷移流程

    使用 Python 實(shí)現(xiàn)微信公眾號(hào)粉絲遷移流程

    近日,因公司業(yè)務(wù)需要,需將原兩個(gè)公眾號(hào)合并為一個(gè),即要將其中一個(gè)公眾號(hào)(主要是粉絲)遷移到另一個(gè)公眾號(hào)。這篇文章主要介紹了使用 Python 實(shí)現(xiàn)微信公眾號(hào)粉絲遷移,需要的朋友可以參考下
    2018-01-01

最新評(píng)論

淮滨县| 乌拉特前旗| 通河县| 读书| 古交市| 柘城县| 留坝县| 岳池县| 罗江县| 怀仁县| 淮阳县| 黄浦区| 崇义县| 和龙市| 曲沃县| 普洱| 沙洋县| 丰台区| 利川市| 宁海县| 祁阳县| 大同市| 苍溪县| 德昌县| 石泉县| 库车县| 房山区| 雅安市| 汝南县| 砀山县| 静乐县| 印江| 新建县| 辽源市| 北京市| 阿合奇县| 叶城县| 岗巴县| 蒲城县| 固镇县| 黄浦区|