欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

python發(fā)送多人郵件沒有展示收件人問題的解決方法

 更新時(shí)間:2019年06月21日 08:50:29   作者:jwensh  
這篇文章主要為大家詳細(xì)介紹了python發(fā)送多人郵件沒有展示收件人問題的解決方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

背景:

工作過程中需要對(duì)現(xiàn)有的機(jī)器、服務(wù)做監(jiān)控,當(dāng)服務(wù)出現(xiàn)問題后,郵件通知對(duì)應(yīng)的人

問題:

使用python 2.7自帶的email庫(kù)來進(jìn)行郵件的發(fā)送,但是發(fā)送后沒有展示收件人列表內(nèi)容

問題代碼示例:

# -*- coding:utf-8 -*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
 
def send_email_to(fromAdd, toAdd, subject, html_text, filename):
 server = 'mail.****.com'
 user = '*****'
 password = '********'
 
 strFrom = fromAdd
 strTo = toAdd
 
 msgRoot = MIMEMultipart('related')
 msgRoot['Subject'] = subject
 msgRoot.preamble = 'This is a multi-part message in MIME format.'
 
 msgAlternative = MIMEMultipart('alternative')
 msgRoot.attach(msgAlternative)
 
 msgText = MIMEText(html_text, 'html', 'utf-8')
 msgAlternative.attach(msgText)
 
 smtp = smtplib.SMTP()
 smtp.connect(server)
 smtp.login(user, passwd)
 
 att5 = MIMEText(open(filename, 'rb').read(), 'base64', 'utf-8')
 att5["Content-Type"] = 'application/octet-stream'
 att5["Content-Disposition"] = 'attachment; filename="fail_7_storage.txt"'
 msgRoot.attach(att5)
 
 smtp.sendmail(strFrom, strTo, msgRoot.as_string())
 smtp.quit()
 return

成功代碼:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
 
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.utils import parseaddr
from email.utils import formataddr
from email.header import Header
 
 
def __format_addr__(addr):
 # 解析郵件地址,以保證郵有別名可以顯示
 alias_name, addr = parseaddr(addr)
 # 防止中文問題,進(jìn)行轉(zhuǎn)碼處理,并格式化為str返回
 return formataddr((Header(alias_name,charset="utf-8").encode(),
      addr.encode("uft-8") if isinstance(addr, unicode) else addr))
 
 
def send_email_to(fromAdd, toAdd, subject, html_text, filename=None):
 
 SERVER = 'mail.***.com'
 USER = '******'
 PASSWD = '***'
 
 strFrom = __format_addr(fromAdd)
 
 strTo = list()
 # 原來是一個(gè)純郵箱的list,現(xiàn)在如果是一個(gè)["jayzhen<jayzhen@jz.com>"]的list給他格式化
 try:
  for a in toAdd:
   strTo.append(__format_addr(a))
 except Exception as e:
  # 沒有對(duì)a和toadd進(jìn)行type判斷,出錯(cuò)就直接還原
  strTo = toAdd
 
 msgRoot = MIMEMultipart('related')
 msgRoot.preamble = 'This is a multi-part message in MIME format.'
 
 msgAlternative = MIMEMultipart('alternative')
 msgRoot.attach(msgAlternative)
 
 # 郵件對(duì)象 
 msgText = MIMEText(html_text, 'html', 'utf-8')
 msgRoot['Subject'] = Header(subject) # 這是郵件的主題,通過Header來標(biāo)準(zhǔn)化
 msgRoot['From'] = strFrom  # 發(fā)件人也是被格式化過的
 msgRoot['to'] = ','.join(strTo) # 這個(gè)一定要是一個(gè)str,不然會(huì)報(bào)錯(cuò)“AttributeError: 'list' object has no attribute 'lstrip'”
 msgAlternative.attach(msgText)
 
 smtp = smtplib.SMTP(SERVER, 11)
 smtp.set_debuglevel(0)
 # smtp.connect(SERVER)
 smtp.login(USER, PASSWD)
 # 這里要注意了,這里的fromadd和toAdd和msgRoot['From'] msgRoot['to']的區(qū)別
 smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())
 smtp.quit()

總結(jié):

看到 msgRoot['to'] = ','.join(strTo)  與  msgRoot['to'] = strTo

實(shí)驗(yàn)過程中發(fā)現(xiàn)這個(gè)["to"]一定要是一個(gè)str,不然會(huì)報(bào)錯(cuò)“AttributeError: 'list' object has no attribute 'lstrip'”

同時(shí)也發(fā)現(xiàn)["to"]的數(shù)據(jù)類型與sendmail(from_addrs,to_addrs,...)的to_addrs不同;前者為str類型,多個(gè)地址使用逗號(hào)分隔,后者為list類型

還有就是MIMEText、MIMEMultipart他們之間的關(guān)系,可以看一哈源碼,他們算是兄弟關(guān)系,都是繼承MIMEBase,那么這是時(shí)候,["From"]、["to"]等這些屬性給誰(shuí)都行。

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

相關(guān)文章

  • Python計(jì)算信息熵實(shí)例

    Python計(jì)算信息熵實(shí)例

    這篇文章主要介紹了Python計(jì)算信息熵實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-06-06
  • 淺談Python數(shù)學(xué)建模之線性規(guī)劃

    淺談Python數(shù)學(xué)建模之線性規(guī)劃

    線性規(guī)劃是運(yùn)籌學(xué)中研究較早、發(fā)展較快、應(yīng)用廣泛、方法較成熟的一個(gè)重要分支,它是輔助人們進(jìn)行科學(xué)管理的一種數(shù)學(xué)方法。研究線性約束條件下線性目標(biāo)函數(shù)的極值問題的數(shù)學(xué)理論和方法
    2021-06-06
  • Centos7下源碼安裝Python3 及shell 腳本自動(dòng)安裝Python3的教程

    Centos7下源碼安裝Python3 及shell 腳本自動(dòng)安裝Python3的教程

    這篇文章主要介紹了Centos7下源碼安裝Python3 shell 腳本自動(dòng)安裝Python3的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-03-03
  • python裝飾器"@"使用實(shí)例深入探究

    python裝飾器"@"使用實(shí)例深入探究

    這篇文章主要為大家介紹了python裝飾器"@"使用實(shí)例深入探究,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2024-01-01
  • Python輕量級(jí)定時(shí)任務(wù)調(diào)度APScheduler的使用

    Python輕量級(jí)定時(shí)任務(wù)調(diào)度APScheduler的使用

    Apscheduler是一個(gè)基于Quartz的python定時(shí)任務(wù)框架,本文主要介紹了Python輕量級(jí)定時(shí)任務(wù)調(diào)度APScheduler的使用,具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-02-02
  • python之wxPython菜單使用詳解

    python之wxPython菜單使用詳解

    這篇文章主要介紹了python中wxPython菜單使用方法,可實(shí)現(xiàn)給彈出菜單項(xiàng)添加圖標(biāo)的功能,在Python程序設(shè)計(jì)中非常具有實(shí)用價(jià)值,需要的朋友可以參考下
    2014-09-09
  • Python函數(shù)學(xué)習(xí)筆記

    Python函數(shù)學(xué)習(xí)筆記

    Python探測(cè)局部作用域的時(shí)候:是在python編譯代碼時(shí)檢測(cè),而不是通過他們?cè)谶\(yùn)行時(shí)的賦值。
    2008-10-10
  • python中class(object)的含義是什么以及用法

    python中class(object)的含義是什么以及用法

    這篇文章主要介紹了python中class(object)的含義是什么以及用法說明,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • Django中數(shù)據(jù)在前后端傳遞的方式之表單、JSON與ajax

    Django中數(shù)據(jù)在前后端傳遞的方式之表單、JSON與ajax

    Django從后臺(tái)往前臺(tái)傳遞數(shù)據(jù)時(shí)有多種方法可以實(shí)現(xiàn),下面這篇文章主要給大家介紹了關(guān)于Django中數(shù)據(jù)在前后端傳遞的方式之表單、JSON與ajax的相關(guān)資料,需要的朋友可以參考下
    2022-10-10
  • python3生成隨機(jī)數(shù)實(shí)例

    python3生成隨機(jī)數(shù)實(shí)例

    這篇文章主要介紹了python3生成隨機(jī)數(shù)的用法,實(shí)例講述了基于Python的隨機(jī)數(shù)的小程序,需要的朋友可以參考下
    2014-10-10

最新評(píng)論