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脚本获取操作系统版本信息
Dec 17 Python
Python实现求笛卡尔乘积的方法
Sep 16 Python
python-视频分帧&amp;多帧合成视频实例
Dec 10 Python
keras tensorflow 实现在python下多进程运行
Feb 06 Python
解决jupyter notebook import error但是命令提示符import正常的问题
Apr 15 Python
Python中的wordcloud库安装问题及解决方法
May 27 Python
python 5个顶级异步框架推荐
Sep 09 Python
详解Python中的文件操作
Jan 14 Python
Python实现文本文件拆分写入到多个文本文件的方法
Apr 18 Python
Python字符串对齐方法使用(ljust()、rjust()和center())
Apr 26 Python
python文件目录操作之os模块
May 08 Python
分享3个非常实用的 Python 模块
Mar 03 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实现多级树型菜单
2006/10/09 PHP
php开发过程中关于继承的使用方法分享
2011/06/17 PHP
php生成图片验证码的方法
2016/04/15 PHP
PHP上传图片到数据库并显示的实例代码
2019/12/20 PHP
Javascript面向对象编程(三) 非构造函数的继承
2011/08/28 Javascript
js onkeypress与onkeydown 事件区别详细说明
2012/12/13 Javascript
js二级地域选择的实现方法
2013/06/17 Javascript
javascript中全局对象的parseInt()方法使用介绍
2013/12/19 Javascript
js中switch case循环实例代码
2013/12/30 Javascript
不同编码的页面表单数据乱码问题解决方法
2015/02/15 Javascript
JavaScript操作Cookie详解
2015/02/28 Javascript
javascript实现跨域的方法汇总
2015/06/25 Javascript
前端jquery部分很精彩
2016/05/03 Javascript
JS阻止事件冒泡行为和闭包的方法
2016/06/16 Javascript
再次谈论Javascript中的this
2016/06/23 Javascript
JS实现图片预览的两种方式
2017/06/27 Javascript
基于dataset的使用和图片延时加载的实现方法
2017/12/11 Javascript
JS中this的指向以及call、apply的作用
2018/05/06 Javascript
vue3.0 搭建项目总结(详细步骤)
2019/05/20 Javascript
vue实现评价星星功能
2020/06/30 Javascript
微信小程序实现自定义底部导航
2020/11/18 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
[36:52]DOTA2真视界:基辅特锦赛总决赛
2017/05/21 DOTA
Python实现截屏的函数
2015/07/25 Python
django项目运行因中文而乱码报错的几种情况解决
2017/11/07 Python
对python3中pathlib库的Path类的使用详解
2018/10/14 Python
python自定义线程池控制线程数量的示例
2019/02/22 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
Python 类方法和实例方法(@classmethod),静态方法(@staticmethod)原理与用法分析
2019/09/20 Python
Python基于time模块表示时间常用方法
2020/06/18 Python
资料员岗位职责
2013/11/17 职场文书
大学生期末自我鉴定
2014/02/01 职场文书
学习十八大报告感言
2014/02/28 职场文书
关于CSS自定义属性与前端页面的主题切换问题
2022/03/21 HTML / CSS
【海涛教你打DOTA】虚空假面第一视角骨弓3房29杀
2022/04/01 DOTA
MySQL8.0 Undo Tablespace管理详解
2022/06/16 MySQL