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 相关文章推荐
Django查询数据库的性能优化示例代码
Sep 24 Python
python中的计时器timeit的使用方法
Oct 20 Python
Python基础教程之利用期物处理并发
Mar 29 Python
使用python生成目录树
Mar 29 Python
Django如何自定义分页
Sep 25 Python
Python中asyncio与aiohttp入门教程
Oct 16 Python
python SVM 线性分类模型的实现
Jul 19 Python
Python3 把一个列表按指定数目分成多个列表的方式
Dec 25 Python
利用django model save方法对未更改的字段依然进行了保存
Mar 28 Python
Python3 socket即时通讯脚本实现代码实例(threading多线程)
Jun 01 Python
Python学习笔记之装饰器
Aug 06 Python
PyCharm Ctrl+Shift+F 失灵的简单有效解决操作
Jan 15 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
php MySQL与分页效率
2008/06/04 PHP
php中转义mysql语句的实现代码
2011/06/24 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
2013/06/10 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
2014/08/15 PHP
Yii中CGridView关联表搜索排序方法实例详解
2014/12/03 PHP
ECSHOP在PHP5.5及高版本上报错的解决方法
2015/08/31 PHP
jquery入门—编写一个导航条(可伸缩)
2013/01/07 Javascript
jquery ajax jsonp跨域调用实例代码
2013/12/11 Javascript
jquery中get,post和ajax方法的使用小结
2014/02/04 Javascript
jQuery的$.proxy()应用示例介绍
2014/04/03 Javascript
jquery删除数据记录时的弹出提示效果
2014/05/06 Javascript
在JavaScript中访问字符串的子串
2015/07/07 Javascript
js 颜色选择插件
2017/01/23 Javascript
详谈angularjs中路由页面强制更新的问题
2017/04/24 Javascript
vue移动端裁剪图片结合插件Cropper的使用实例代码
2017/07/10 Javascript
jQuery中.attr()和.data()的区别分析
2017/09/03 jQuery
Vue 配合eiement动态路由,权限验证的方法
2018/09/26 Javascript
nodejs读取本地中文json文件出现乱码解决方法
2018/10/10 NodeJs
jQuery实现form表单基于ajax无刷新提交方法实例代码
2019/11/04 jQuery
JS如何实现动态添加的元素绑定事件
2019/11/12 Javascript
基于JavaScript获取url参数2种方法
2020/04/17 Javascript
微信小程序自定义tabBar的踩坑实践记录
2020/11/06 Javascript
[01:20:38]完美世界DOTA2联赛 GXR vs IO 第一场 11.07
2020/11/09 DOTA
Python复制目录结构脚本代码分享
2015/03/06 Python
python PyQt5/Pyside2 按钮右击菜单实例代码
2019/08/17 Python
英国最出名高街品牌:Forever Unique
2018/02/24 全球购物
捷克原创男装和女装购物网站:Bolf.cz
2018/04/28 全球购物
个人找工作的自我评价
2013/10/17 职场文书
幼儿如何来做好自我评价
2013/11/05 职场文书
施工工地安全标语
2014/06/07 职场文书
珍惜资源的建议书
2014/08/26 职场文书
2015秋季新学期开学寄语
2015/05/28 职场文书
小学体育课教学反思
2016/02/16 职场文书
Python基础之tkinter图形化界面学习
2021/04/29 Python
python读取并查看npz/npy文件数据以及数据显示方法
2022/04/14 Python
鸿蒙3.0体验感怎么样? 鸿蒙3.0系统评测向
2022/08/14 数码科技