Python 实现邮件发送功能(进阶)
本章主要包含知识点:
很多人学习python,不知道从何学起。
很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。
很多已经做案例的人,却不知道如何去学习更加高深的知识。
那么针对这三类人,我给大家提供一个好的学习平台,免费领取视频教程,电子书籍,以及课程的源代码!
QQ群:1097524789
1. 如何将图片放到邮件主体中发送
2. 如何发送附件
问题一: 如何将图片放在邮件主体中发送
从上篇中应该都已知道,其实发送邮件,就是发送Html格式的字符串,那么发送图片时,可不可以也放到html中去呢?答案是肯定的,但是html中有一个指定图片的地址或来源,那么邮件中该指向何处呢?答案是附件。
根据这个思路,在发送文本的代码上进行一个优化,先上代码:
1 class Email4Pic(Email):2 ''' 3 入参为filenames 即图片列表,即可以一次发送多张图片4 '''5 def __init__(self, filenames : list):6 super(Email4Pic, self).__init__()7 self.filenames = filenames8 9 def message_init(self, html): 10 message = MIMEMultipart() 11 message['subject'] = Header(self.subject, 'utf-8') 12 message['From'] = self.sender 13 message['To'] = ', '.join(self.receiver) 14 message['Cc'] = ', '.join(self.cc) 15 16 # 解决乱码, html是html格式的str 17 message_context = MIMEText(html, _subtype='html', _charset='utf-8') 18 19 # 邮件正文内容 20 message.attach(message_context) 21 22 # 邮件加入图片 23 cid = 0 24 for filename in self.filenames: 25 m_file = MIMEBase('image','jpg') 26 m_file.add_header('Content-Disposition', 'attachment') # 将图片放进附件 27 m_file.add_header('Content-ID', '<' + str(cid) + '>') # 设置图片id 28 29 f = open(filename, 'rb') 30 m_file.set_payload(f.read()) 31 encoders.encode_base64(m_file) 32 message.attach(m_file) 33 cid += 1 34 return message 35 36 if __name__ == '__main__': 37 print('start……') 38 39 pic1 = "C:\\Users\\Administrator\\Pictures\\Python.png" 40 pic2 = "C:\\Users\\Administrator\\Pictures\\IMG_9676.jpg" 41 pics = [] 42 pics.append(pic1) 43 pics.append(pic2) 44 45 sendpic = Email4Pic(pics) 46 47 sendpic.smtp = 'smtp.163.com' 48 sendpic.username = 'wjian.coming@163.com' 49 sendpic.password = 'passwd' 50 sendpic.subject = 'Test/测试邮件' 51 sendpic.sender = 'wjian.coming@163.com' 52 sendpic.receiver.append('948001879@qq.com') 53 sendpic.cc.append('948001879@qq.com') 54 55 strs = '''<span>This is the first picture</span><br> <img src='cid:0'><br> 56 <span>This is the Second picture</span><br> <img src='cid:1'>''' 57 58 sendpic.send_email(strs) 59 60 print('end')
没错!发送图片即在原来的父类上做了个子类,并复用了父类中的属性和部分方法(send_email),并在message_init方法基础上添加了图片处理的一些逻辑。
第6行:即继承父类的属性
第25~32行:将图片放进附件缓存中,并将每个图片标记ID,再读取后放入邮件主体文本中
第55~56行:此字符串就是即将发送的html格式文件,其中 <img src='cid:0'> 即读取编号为0的图片,从附件缓存中读取的,作为html文件的图片来源
第58行:调用父类的send_email方法,发送邮件
如上执行后,我们看下发送后的效果( 图片2太大,没有完全截图出来 )。
这样就可以理解,只要编辑好Html就可以发送任意内容啦~
问题二: 如何发送附件
这时,又有人出来问了,你这是两张图片,那要是100张呢,那不得用附件形式才更合理? 这正是接下来准备讲的,如何发送附件呢?
同样,有了上面的经验,我们也写一个子类,只不过这次只要将文件读入附件即可,不需要写到邮件主体中,代码如下:
1 class Email4Attr(Email):2 ''' 3 入参为filenames 即文件列表,即可以一次发送多个附件4 '''5 def __init__(self, filenames : list):6 super(Email4Attr, self).__init__()7 self.filenames = filenames8 9 def message_init(self, html): 10 message = MIMEMultipart() 11 message['subject'] = Header(self.subject, 'utf-8') 12 message['From'] = self.sender 13 message['To'] = ', '.join(self.receiver) 14 message['Cc'] = ', '.join(self.cc) 15 16 # 解决乱码, html是html格式的str 17 message_context = MIMEText(html, _subtype='html', _charset='utf-8') 18 19 # 邮件正文内容 20 message.attach(message_context) 21 22 # 邮件加入图片 23 for filename in self.filenames: 24 name = os.path.split(filename)[-1] # 从绝对路径中取出文件名 25 m_file = MIMEBase('image','jpg') 26 m_file.add_header('Content-Disposition', 'attachment', filename = name) # 将文件放入附件 27 f = open(filename, 'rb') 28 29 m_file.set_payload(f.read()) 30 encoders.encode_base64(m_file) 31 message.attach(m_file) 32 return message 33 34 if __name__ == '__main__': 35 print('start……') 36 37 pic1 = "C:\\Users\\Administrator\\Pictures\\Python.png" 38 pic2 = "C:\\Users\\Administrator\\Pictures\\IMG_9676.jpg" 39 pics = [] 40 pics.append(pic1) 41 pics.append(pic2) 42 43 sendAtt = Email4Attr(pics) 44 45 sendAtt.smtp = 'smtp.163.com' 46 sendAtt.username = 'wjian.coming@163.com' 47 sendAtt.password = 'passwd' 48 sendAtt.subject = 'Test/测试邮件' 49 sendAtt.sender = 'wjian.coming@163.com' 50 sendAtt.receiver.append('948001879@qq.com') 51 sendAtt.cc.append('948001879@qq.com') 52 53 strs = 'Please check the attachment ' 54 sendAtt.send_email(strs) 55 56 print('end')
可以看出,与图片不同的地方就是处理内容的方式不同,一个是放在附件中,并标记ID由主体内容读取,一个是直接放到附件中。
第26行:将文件写入附件中,利用filename这个关键属性命名附件
如上执行后,我们看下发送后的效果,此时两个图片已经被放进了附件中。对于文件类型的附件,都是一样处理,直接按规则调用就行了,这里就不再示例,有兴趣的伙伴可以自己下来试试呢。
综上,对于邮件的发送只要按照指定的框架即可轻松定制,这里只是做了个指引和参考,如果您有更好的想法,或更难的挑战,不妨评论区留言,我们来互相交流一下啊。
Python 实现邮件发送功能(进阶)相关推荐
- python实现邮件发送功能
用最简单的方法实现邮件发送功能,拒绝重复造轮子,提供工作效率. 目录 1.安装依赖 2.发送文本邮件 3.发送多人邮件 4.发送附件邮件 1.安装依赖 pip install yagmail 2.发送 ...
- python能否实现邮件合并_Python 基于Python实现邮件发送
基于Python实现邮件发送 by:授客 QQ:1033553122 测试环境: Python版本:Python 2.7 注:需要修改mimetypes.py文件(该文件可通过文章底部的网盘分享连接获 ...
- android 添加附件功能,Android实现带附件的邮件发送功能
本文实例讲解了基于基于jmail实现android邮件发送功能,分享给大家供大家参考,具体内容如下 在android上发送邮件方式: 第一种:借助gmail app客户端,缺点是必须使用gmail帐号 ...
- android 信息添加附件功能,Android实现带附件的邮件发送功能
本文实例讲解了基于基于JMail实现Android邮件发送功能,分享给大家供大家参考,具体内容如下 在android上发送邮件方式: 第一种:借助GMail APP客户端,缺点是必须使用GMail帐号 ...
- Java技术:SpringBoot实现邮件发送功能
邮件发送功能基本是每个完整业务系统要集成的功能之一,今天小编给大家介绍一下SpringBoot实现邮件发送功能,希望对大家能有所帮助! 今天主要给大家分享简单邮件发送.HTML邮件发送.包含附件的邮件 ...
- Spring Boot最新版集成邮件发送功能大全
Spring Boot最新版集成邮件发送功能大全 前言 一.开启SMTP服务并获取授权码 二.创建Spring Boot项目 1.配置邮箱基本信息: 2.简单邮件发送: 3.发送带附件的邮件: 5.使 ...
- node.js发送html,利用Node.JS实现邮件发送功能
第一步.配置篇 首先需要安装nodemailer库 npm install nodemailer//默认会安装最新的版本. 关于这个库的文档参见nodemailer 第二步.库的一些使用介绍 这个库使 ...
- 利用hutool实现邮件发送功能
如何利用hutool工具包实现邮件发送功能呢? 1.首先引入hutool依赖 <dependency><groupId>cn.hutool</groupId>< ...
- Laravel 6 结合网易/阿里邮箱基本邮件发送功能使用
如果没有自建邮件服务器,直接结合网易.阿里邮箱可以非常简单方便的使用邮件发送功能. 注册前首先得保证自己有一个域名,阿里最好是在当前账户下有一个已注册的域名. 根据下方地址注册相应的账户信息,选择其中 ...
最新文章
- 剖析今日头条技术面试过程以及应该如何准备?
- 一步一步教你如何向ALEXA提交网站介绍信息
- 用rand_7()实现rand_10()
- 想不到吧,这些都能用R!
- 本周学习总结JAVA
- 图解 Kafka,看本篇就足够啦
- 使用Red Hat OS为Amazon EC2实例安装SQL Server Linux
- 人力节省 50%,研发效能提升 40%,阿里 Serverless 架构落地实践
- 闭包与setTimeout
- 面试官嘲笑我,这你都不会?
- 【数学建模】数学建模学习5---图与网络(例题+matlab代码实现)
- matlab的汉明窗函数如何导出,基于汉明窗函数的FIR低通滤波器的设计.doc
- 集装箱编号校验码规则(JavaScript版本)
- 红米4 android os唤醒,红米4(Redmi 4 高配版)一键救砖教程,轻松刷回官方系统
- sendgrid_使用SendGrid处理传入的电子邮件
- LCCUP‘22秋季编程大赛(个人赛)总结
- 线性表中的尾插法单链表的学习
- 从CSDN转战博客园
- Solr安装、中文分词以及定时更新索引
- opengl 画椭圆_简笔画|如何画一个可爱的米老鼠
热门文章
- slider改变对话框颜色
- bzoj 4660 Crazy Rabbit——LIS解决“相交”限制的思想
- Python MySqlDB 增删改数据库(转载)
- Algs4-1.3.33矩阵库
- 软链接与硬链接的区别;描述通配符与正则表达式的区别
- 【2018.05.04学习笔记】【linux基础知识10.1-10.5】
- 修复SVCHOST.EXE出现0x745f2780错误
- (转)使用异步Python 3.6和Redis编写快速应用程序
- C++ 以对象管理资源
- Quartus II 与ModelSim-SE联合仿真Shift_ram