这篇文章主要为大家详细介绍了python发送多人邮件没有展示收件人问题的解决方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
背景:

工作过程中需要对现有的机器、服务做监控,当服务出现问题后,邮件通知对应的人

问题:

使用python 2.7自带的email库来进行邮件的发送,但是发送后没有展示收件人列表内容

问题代码示例:

# -*- coding:utf-8 -*-
import smtplib
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMETextdef send_email_to(fromAdd, toAdd, subject, html_text, filename):server = 'mail.****.com'user = '*****'password = '********'strFrom = fromAddstrTo = toAddmsgRoot = MIMEMultipart('related')msgRoot['Subject'] = subjectmsgRoot.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 Headerdef __format_addr__(addr):# 解析邮件地址,以保证邮有别名可以显示alias_name, addr = parseaddr(addr)# 防止中文问题,进行转码处理,并格式化为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()# 原来是一个纯邮箱的list,现在如果是一个["jayzhen<jayzhen@jz.com>"]的list给他格式化try:for a in toAdd:strTo.append(__format_addr(a))except Exception as e:# 没有对a和toadd进行type判断,出错就直接还原strTo = toAddmsgRoot = MIMEMultipart('related')msgRoot.preamble = 'This is a multi-part message in MIME format.'msgAlternative = MIMEMultipart('alternative')msgRoot.attach(msgAlternative)# 邮件对象 msgText = MIMEText(html_text, 'html', 'utf-8')msgRoot['Subject'] = Header(subject) # 这是邮件的主题,通过Header来标准化msgRoot['From'] = strFrom  # 发件人也是被格式化过的msgRoot['to'] = ','.join(strTo) # 这个一定要是一个str,不然会报错“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']的区别smtp.sendmail(fromAdd, toAdd, msgRoot.as_string())smtp.quit()

总结:

看到 msgRoot[‘to’] = ‘,’.join(strTo) 与 msgRoot[‘to’] = strTo

实验过程中发现这个[“to”]一定要是一个str,不然会报错“AttributeError: ‘list’ object has no attribute ‘lstrip’”

同时也发现[“to”]的数据类型与sendmail(from_addrs,to_addrs,…)的to_addrs不同;前者为str类型,多个地址使用逗号分隔,后者为list类型

还有就是MIMEText、MIMEMultipart他们之间的关系,可以看一哈源码,他们算是兄弟关系,都是继承MIMEBase,那么这是时候,[“From”]、[“to”]等这些属性给谁都行。
最后给大家推荐一个口碑不错的python聚集地【点击进入】,这里有很多的老前辈学习技巧,学习心得

,面试技巧,职场经历等分享,更为大家精心准备了零基础入门资料,实战项目资料,每天都有程序员

定时讲解Python技术,分享一些学习的方法和需要留意的小细节

python发送多人邮件没有展示收件人问题的解决方法相关推荐

  1. 【转】解决smtplib发送多人邮件没有展示收件人的问题

    [转]解决smtplib发送多人邮件没有展示收件人的问题 参考文章: (1)[转]解决smtplib发送多人邮件没有展示收件人的问题 (2)https://www.cnblogs.com/i-shu/ ...

  2. python发送多人邮件_【Python3】 发送邮件给多人

    1.收件人邮箱msg_to=['258507328@qq.com,1501949013@qq.com,277544354@qq.com'],以列表的方式给出. 2.message['To'] =',' ...

  3. python发送多人邮件_Python如何发送邮件给多人

    网上找到的一般是这样的: import smtplib import email.MIMEMultipart import email.MIMEText import email.MIMEBase i ...

  4. python发邮件11002_【python发送zabbix报警邮件,SSL版本】mailman.py

    [python发送zabbix报警邮件,SSL版本]mailman.py#!/usr/local/bin/python3 # # via  @ 20150210 # SSL only ''' 用法: ...

  5. Python发送多附件邮件的方法

    Python发送多附件邮件的基本思路,首先就是用MIMEMultipart()方法来表示这个邮件由多个部分组成.然后再通过attach()方法将各部分内容分别加入到MIMEMultipart容器中.M ...

  6. Outlook发邮件时忘记写主题的解决方法

    用惯了Foxmail添加主题提示,在Outlook下两次发邮件忘记写主题了,实在不应该!分享一个解决方案. Outlook发邮件时忘记写主题的解决方法: 按ALT+F11进入VBA集成开发环境,在左上 ...

  7. Python语言importError:cannot import name ‘InvalidArgumentException‘报错的解决方法:

    Python语言importError:cannot import name 'InvalidArgumentException'报错的解决方法: 参考文章: (1)Python语言importErr ...

  8. python 中关于无法导入自己写的类。解决方法

    python 中关于无法导入自己写的类.解决方法 参考文章: (1)python 中关于无法导入自己写的类.解决方法 (2)https://www.cnblogs.com/jc-home/p/1209 ...

  9. Windows下运行python脚本报错“ImportError: No Module named ...”的解决方法

    Windows下运行python脚本报错"ImportError: No Module named ..."的解决方法 参考文章: (1)Windows下运行python脚本报错& ...

  10. windows下 python 使用 pip 安装TA-Lib报错的原因及解决方法

    windows下 python 使用 pip 安装TA-Lib报错的原因及解决方法 问题环境 问题描述 问题原因 & 解决办法 问题环境 Windows 10 x64 .python 3.8. ...

最新文章

  1. apache+svn服务搭建
  2. 用什么样的个人笔记类软件?OneNote、EverNote(印象笔记)、为知笔记、麦库记事、有道云笔记……...
  3. 永远不要在 MySQL 中使用“utf8”
  4. ASP.NET MVC 简单的分页思想与实现
  5. Java内存使用情况查看工具
  6. python选择框格式_PyQt组合框选择性文本格式
  7. 五月份哪里有有计算机考试,2021年5月全国计算机等级考试报名时间
  8. 如何把Eclipse工程导入到Android Studio
  9. (1)散列表(哈希表)的定义
  10. C++ static、const和static const类型成员变量声明及其初始化
  11. 关于快速幂与快速积取模实现的尝试
  12. 游戏史上80重要创新(原资料来自17173)
  13. 数学脱式计算在线计算机,四年级数学脱式计算练习400题
  14. 实施经理的工具箱--走出软件作坊:三五个人十来条枪 如何成为开发正规军(五)
  15. eclipse 工作空间的高效使用
  16. 教你正确使用文字识别软件ABBYY的转换格式功能
  17. 技术不是越来越简单,而是框架是你的羁绊
  18. P12-Windows与网络基础-Windows组管理
  19. java爬虫:Heritrix教程
  20. 虚拟机里重装Ubuntu系统并配置深度学习环境

热门文章

  1. 暴风影音皮肤_暴风影音16周年纪念版 v9.04
  2. html制作相册影集,影集相册制作系统
  3. 技术员 Ghost Win10 x86 装机版/纯净版 201710
  4. html5设计基础报告,《网页设计与制作基础》实验报告.doc
  5. 最新2022亲测可用的免费google翻译api
  6. 家用智能门锁常见的开锁方式,主要有哪些?
  7. 湖南大学高级软件开发过程
  8. HTML 编辑器推荐
  9. 用VC2013编译了一个程序,在Windows 8、Windows 7(64位、32位)下都能正常运行。但在Win XP,Win2003下运行时,却报错不能运行
  10. 【画学numpy】Drawing and Studying Numpy