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学习手册中的python多态示例代码
Jan 21 Python
Python入门篇之字符串
Oct 17 Python
Python3 正在毁灭 Python的原因分析
Nov 28 Python
在Linux下使用Python的matplotlib绘制数据图的教程
Jun 11 Python
Python multiprocessing多进程原理与应用示例
Feb 28 Python
django框架事务处理小结【ORM 事务及raw sql,customize sql 事务处理】
Jun 27 Python
python 计算数据偏差和峰度的方法
Jun 29 Python
python离线安装外部依赖包的实现
Feb 13 Python
django 解决model中类写不到数据库中,数据库无此字段的问题
May 20 Python
如何基于python把文字图片写入word文档
Jul 31 Python
Python中logging日志记录到文件及自动分割的操作代码
Aug 05 Python
python实现简单的井字棋游戏(gui界面)
Jan 22 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
回首过去10年中最搞笑的10部动漫,哪一部让你节操尽碎?
2020/03/03 日漫
5.PHP的其他功能
2006/10/09 PHP
字符串长度函数strlen和mb_strlen的区别示例介绍
2014/09/09 PHP
PHP可变变量学习小结
2015/11/29 PHP
基于PHPexecl类生成复杂的报表表头示例
2016/10/14 PHP
laravel 实现向公共模板中传值 (view composer)
2019/10/22 PHP
ThinkPHP5与单元测试PHPUnit使用详解
2020/02/23 PHP
php+websocket 实现的聊天室功能详解
2020/05/27 PHP
jQuery.autocomplete 支持中文输入(firefox)修正方法
2011/03/10 Javascript
JavaScript中的property和attribute介绍
2011/12/26 Javascript
通过正则格式化url查询字符串实现代码
2012/12/28 Javascript
jquery多行滚动/向左或向上滚动/响应鼠标实现思路及代码
2013/01/23 Javascript
js实现一个省市区三级联动选择框代码分享
2013/03/06 Javascript
Extjs407 getValue()和getRawValue()区别介绍
2013/05/21 Javascript
使用iframe window的scroll方法控制iframe页面滚动
2014/03/05 Javascript
javascript 事件处理示例分享
2014/12/31 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
node.js的事件机制
2017/02/08 Javascript
canvas红包照片实例分享
2017/02/28 Javascript
Vuex之理解state的用法实例
2017/04/19 Javascript
使用jQuery实现鼠标点击左右按钮滑动切换
2017/08/04 jQuery
javascript实现电脑和手机版样式切换
2017/11/10 Javascript
js实现自动播放匀速轮播图
2020/02/06 Javascript
vue中父子组件的参数传递和应用示例
2021/01/04 Vue.js
分享vim python缩进等一些配置
2018/07/02 Python
Python 编程速成(推荐)
2019/04/15 Python
Django 再谈一谈json序列化
2020/03/16 Python
HTML5中meta属性的使用方法
2016/02/29 HTML / CSS
使用phonegap进行提示操作的具体方法
2017/03/30 HTML / CSS
英国拳击装备购物网站:RDX Sports
2018/01/23 全球购物
党委书记岗位职责
2013/11/24 职场文书
教育科研先进个人材料
2014/01/26 职场文书
2014全国两会大学生学习心得体会
2014/03/10 职场文书
Python 发送SMTP邮件的简单教程
2021/06/24 Python
Oracle 死锁的检测查询及处理
2021/09/25 Oracle
nginx日志格式分析和修改
2022/04/28 Servers