python3实现带多张图片、附件的邮件发送


Posted in Python onAugust 10, 2019

本文实例为大家分享了python3实现多张图片附件邮件发送的具体代码,供大家参考,具体内容如下

直接上代码,没有注释!

from email.mime.text import MIMEText
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.header import Header

class Mail(object):
  def __init__(self, host, nickname, username, password, postfix):
    self.host = host
    self.nickname = nickname
    self.username = username
    self.password = password
    self.postfix = postfix

  def send_mail(self, to_list, subject, content, cc_list=[], encode='gbk', is_html=True, images=[]):
    me = str(Header(self.nickname, encode)) + "<" + self.username + "@" + self.postfix + ">"
    msg = MIMEMultipart()
    msg['Subject'] = Header(subject, encode)
    msg['From'] = me
    msg['To'] = ','.join(to_list)
    msg['Cc'] = ','.join(cc_list)
    if is_html:
      mail_msg = ''
      for i in range(len(images)):
        mail_msg += '<p><img src="cid:image%d" height="240" width="320"></p>' % (i+1)
      msg.attach(MIMEText(content + mail_msg, 'html', 'utf-8'))

      for i, img_name in enumerate(images):
        with open(img_name, 'rb') as fp:
          img_data = fp.read()
        msg_image = MIMEImage(img_data)
        msg_image.add_header('Content-ID', '<image%d>' % (i+1))
        msg.attach(msg_image)
        # 将图片作为附件
        # image = MIMEImage(img_data, _subtype='octet-stream')
        # image.add_header('Content-Disposition', 'attachment', filename=images[i])
        # msg.attach(image)
    else:
      msg_content = MIMEText(content, 'plain', encode)
      msg.attach(msg_content)

    try:
      s = smtplib.SMTP()
      # s.set_debuglevel(1)
      s.connect(self.host)
      s.login(self.username, self.password)
      s.sendmail(me, to_list + cc_list, msg.as_string())
      s.quit()
      s.close()
      return True
    except Exception as e:
      print(e)
      return False

def send_mail(to_list, title, content, cc_list=[], encode='utf-8', is_html=True, images=[]):
  content = '<pre>%s</pre>' % content
  m = Mail('smtp.163.com', 'TV-APP TEST', 'tvapp_qa', 'ujlnluutpfespgxz', '163.com')
  m.send_mail(to_list, title, content, cc_list, encode, is_html, images)


if __name__ == '__main__':
  images = [
    '1.png',
    '2.png',
    '3.png',
    '4.png',
  ]
  import time
  title = 'new images %s' % time.strftime('%H:%M:%S')
  content = 'this is attach images %s' % time.time()
  send_mail(['x@163.com'], title, content, ['xx@163.com', 'xxx@163.com'], 'utf-8', True, images)

后记

调试发送多张图片的时候遇到的问题:

用for循环生成的mail_msg,不能直接attach,需要和content一起attach

mail_msg = ''
for i in range(len(images)):
  mail_msg += '<p><img src="cid:image%d" height="240" width="320"></p>' % (i+1)
  msg.attach(MIMEText(**content** + mail_msg, 'html', 'utf-8'))

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python中的__new__与__init__魔术方法理解笔记
Nov 08 Python
Python 装饰器深入理解
Mar 16 Python
python链接oracle数据库以及数据库的增删改查实例
Jan 30 Python
基于OpenCV python3实现证件照换背景的方法
Mar 22 Python
PyQt5重写QComboBox的鼠标点击事件方法
Jun 25 Python
Python字符串格式化输出代码实例
Nov 22 Python
pytorch模型存储的2种实现方法
Feb 14 Python
Python request操作步骤及代码实例
Apr 13 Python
python实现坦克大战
Apr 24 Python
Anaconda+vscode+pytorch环境搭建过程详解
May 25 Python
利用python对mysql表做全局模糊搜索并分页实例
Jul 12 Python
pytorch Dropout过拟合的操作
May 27 Python
python实现邮件自动发送
Aug 10 #Python
python爬取百度贴吧前1000页内容(requests库面向对象思想实现)
Aug 10 #Python
python正则爬取某段子网站前20页段子(request库)过程解析
Aug 10 #Python
Django项目主urls导入应用中views的红线问题解决
Aug 10 #Python
Python中的 sort 和 sorted的用法与区别
Aug 10 #Python
Python测试模块doctest使用解析
Aug 10 #Python
Django发送邮件和itsdangerous模块的配合使用解析
Aug 10 #Python
You might like
smarty+adodb+部分自定义类的php开发模式
2006/12/31 PHP
php date与gmdate的获取日期的区别
2010/02/08 PHP
php 随机排序广告的实现代码
2011/05/09 PHP
PHP将英文数字转换为阿拉伯数字实例讲解
2019/01/28 PHP
PHP中“=&gt;
2019/03/01 PHP
js工具方法弹出蒙版
2013/05/08 Javascript
JSONP跨域的原理解析及其实现介绍
2014/03/22 Javascript
常用的jQuery前端技巧收集
2014/12/24 Javascript
15个jquery常用方法、小技巧分享
2015/01/13 Javascript
原生js实现tab选项卡切换
2020/03/23 Javascript
微信小程序(应用号)简单实例应用及实例详解
2016/09/26 Javascript
微信小程序 共用变量值的实现
2017/07/12 Javascript
Angular4绑定html内容出现警告的处理方法
2017/11/03 Javascript
jq.ajax+php+mysql实现关键字模糊查询(示例讲解)
2018/01/02 Javascript
React教程之封装一个Portal可复用组件的方法
2018/01/02 Javascript
nodejs dgram模块广播+组播的实现示例
2019/11/04 NodeJs
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
easyUI使用分页过滤器对数据进行分页操作实例分析
2020/06/01 Javascript
理解Proxy及使用Proxy实现vue数据双向绑定操作
2020/07/18 Javascript
[57:50]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第二局
2016/03/05 DOTA
[55:45]LGD vs OG 2019国际邀请赛淘汰赛 胜者组 BO3 第三场 8.24
2019/09/10 DOTA
Python简单生成8位随机密码的方法
2017/05/24 Python
详解Python3序列赋值、序列解包
2019/05/14 Python
python应用文件读取与登录注册功能
2019/09/23 Python
sklearn-SVC实现与类参数详解
2019/12/10 Python
python-OpenCV 实现将数组转换成灰度图和彩图
2020/01/09 Python
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
Jones Bootmaker官网:优质靴子和鞋子在线
2020/11/30 全球购物
软件测试工程师面试问题精选
2016/10/28 面试题
总务岗位职责
2013/11/19 职场文书
八年级音乐教学反思
2014/01/09 职场文书
创业计划书撰写原则
2014/01/25 职场文书
解除租房协议书
2014/12/03 职场文书
2015年大学社团工作总结
2015/04/09 职场文书
教师研修随笔感言
2015/11/18 职场文书
box-shadow单边阴影的实现
2023/05/21 HTML / CSS