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 25 Python
python根据出生日期获得年龄的方法
Mar 31 Python
实例探究Python以并发方式编写高性能端口扫描器的方法
Jun 14 Python
python爬虫入门教程--利用requests构建知乎API(三)
May 25 Python
浅谈Python中的私有变量
Feb 28 Python
python 删除指定时间间隔之前的文件实例
Apr 24 Python
解决python 无法加载downsample模型的问题
Oct 25 Python
pytorch对可变长度序列的处理方法详解
Dec 08 Python
解决Pytorch 训练与测试时爆显存(out of memory)的问题
Aug 20 Python
python实现拉普拉斯特征图降维示例
Nov 25 Python
使用 PyTorch 实现 MLP 并在 MNIST 数据集上验证方式
Jan 08 Python
关于keras中keras.layers.merge的用法说明
May 23 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版自动生成文章摘要
2008/07/23 PHP
php中stdClass的用法分析
2015/02/27 PHP
php生成验证码函数
2015/10/20 PHP
php修改数组键名的方法示例
2017/04/15 PHP
Jquery 动态添加按钮实现代码
2010/05/06 Javascript
仅IE6/7/8中innerHTML返回值忽略英文空格的问题
2011/04/07 Javascript
JS声明变量背后的编译原理剖析
2012/12/28 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
用console.table()调试javascript
2014/09/04 Javascript
javascript里使用php代码实例
2014/12/13 Javascript
微信jssdk在iframe页面失效问题的解决措施
2016/03/03 Javascript
jQuery通过ajax方法获取json数据不执行success的原因及解决方法
2016/10/15 Javascript
Javascript之面向对象--方法
2016/12/02 Javascript
js实现自定义进度条效果
2017/03/15 Javascript
如何选择jQuery版本 1.x? 2.x? 3.x?
2017/04/01 jQuery
解决vue 路由变化页面数据不刷新的问题
2018/03/13 Javascript
[42:32]完美世界DOTA2联赛循环赛 Magma vs PXG BO2第二场 10.28
2020/10/28 DOTA
python基础教程之类class定义使用方法
2014/02/20 Python
python多线程threading.Lock锁用法实例
2014/11/01 Python
用Python编写web API的教程
2015/04/30 Python
python实现ping的方法
2015/07/06 Python
Python编程之微信推送模板消息功能示例
2017/08/21 Python
python交换两个变量的值方法
2019/01/12 Python
Python数据可视化实现正态分布(高斯分布)
2019/08/21 Python
html5唤起app的方法
2017/11/30 HTML / CSS
阿迪达斯希腊官方网上商店:adidas希腊
2019/04/06 全球购物
为女性购买传统的印度服装和婚纱:Kalkifashion
2019/07/22 全球购物
学生实习推荐信范文
2013/11/26 职场文书
社区学习十八大感想
2014/01/22 职场文书
迎元旦广播稿
2014/02/22 职场文书
学雷锋活动总结范文
2014/04/25 职场文书
暗恋桃花源观后感
2015/06/12 职场文书
中小学教师继续教育心得体会
2016/01/19 职场文书
python3实现Dijkstra算法最短路径的实现
2021/05/12 Python
pytorch 梯度NAN异常值的解决方案
2021/06/05 Python
厉害!这是Redis可视化工具最全的横向评测
2021/07/15 Redis