Python实现发送QQ邮件的封装


Posted in Python onJuly 14, 2017

本文实例为大家分享了Python实现发送QQ邮件的封装代码,供大家参考,具体内容如下

封装code

import smtplib
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from email.header import Header

# type=plain 文本格式 默认
# type=html 网页格式
# type=image 带本地图片的html
# type=file 带附件
# 带图片时,msg为html格式
# 示例:
'''
msg ='<p>Python 邮件发送测试...</p><p>图片演示:</p><p><img src="cid:image1"></p>'
'''

class MyQQEmail:
 __mail_user = '' # 登陆邮箱
 __mail_pass = '' # 邮箱授权码
 __senderName= '' # 发件人
 def __init__(self,user,pas,name) -> None:
  self.__mail_user=user
  self.__mail_pass=pas
  self.__senderName=name

 def sendQQEmail(self,receiver, title, msg, type='plain', filePaths=[], fileNames=[], imagePaths=None):
  if receiver == '':
   return False

  mail_host = 'smtp.qq.com'
  mail_port = 465 # qq smtp端口465
  sender = self.__mail_user

  type = type.lower()
  if type.__eq__('plain') or type.__eq__('html'):
   message = MIMEText(msg, type, 'utf-8')
  elif type.__eq__('file') or type.__eq__('image'):
   message = MIMEMultipart()
  else:
   return False

  try:
   message['From'] = Header(self.__senderName, 'utf-8')
   message['To'] = Header(str(receiver), 'utf-8')
   subject = title
   message['Subject'] = Header(subject, 'utf-8')

   if type.__eq__('file') or type.__eq__('image'):
    # 邮件正文内容
    if imagePaths is not None:
     message.attach(MIMEText(msg, 'html', 'utf-8'))
     # 添加图片
     if imagePaths is not None:
      for index,imagePath in enumerate(imagePaths,1):
       # 指定图片为当前目录
       fp = open(imagePath, 'rb')
       msgImage = MIMEImage(fp.read())
       fp.close()

       # 定义图片 ID,在 HTML 文本中引用
       msgImage.add_header('Content-ID', '<image'+str(index)+'>')
       message.attach(msgImage)
    else:
     message.attach(MIMEText(msg, 'plain', 'utf-8'))
    # 构造附件,传送filePath制定文件
    for filePath, fileName in zip(filePaths, fileNames):
     att = MIMEText(open(filePath, 'rb').read(), 'base64', 'utf-8')
     att["Content-Type"] = 'application/octet-stream'
     # 邮件中显示文件名
     att["Content-Disposition"] = 'attachment; filename="' + fileName + '"'
     message.attach(att)

  except Exception as e:
   print(e)
   return False
  try:
   smtpObj = smtplib.SMTP_SSL(mail_host, mail_port)
   smtpObj.login(self.__mail_user, self.__mail_pass)
   smtpObj.sendmail(sender, receiver, message.as_string())
   smtpObj.quit()
   return True
  except Exception as e:
   print(e)
   return False

使用demo

发送纯文本

qq=MyQQEmail('登陆邮箱','邮箱授权码','发件人')
qq.sendQQEmail(['收件人邮箱1','收件人邮箱2'], "标题", '内容')

发送html

from smtp.myqqemail import MyQQEmail
from urllib import request

response = request.urlopen("http://www.vove7.cn:800/getCopyright.php") # 打开网站
htmlContent=response.read()   #获取网站内容

myqqemail=MyQQEmail('xxx@qq.com','xxxxxx','发件人')
if myqqemail.sendQQEmail(['xxx@qq.com'],title="html测试",msg=htmlContent,type='html'):
  print('Send successful')
else:
  print('Send failed')

发送带图片内容

注意图片和<img src="cid:image1"><img src="cid:image2">中'image_index'保持一致

from smtp.myqqemail import MyQQEmail
msg = '<p>Python 邮件发送测试...</p><p>图片演示:</p><p><img src="cid:image1"><img src="cid:image2"></p>'
myQQEmail=MyQQEmail('xxx@qq.com','xxxxxx','发件人')
if myQQEmail.sendQQEmail(
    ['xxx@qq.com'], '图片and附件', msg,
    type='image', filePaths=['../two/t.py', 'B.txt'],
    fileNames=['test.txt', 'B.txt'],
    imagePaths=['image.jpg','image.jpg']):
  print('Send successful')
else:
  print('Send failed')

发送附件

fileName为显示名

from smtp.myqqemail import MyQQEmail

qqemail=MyQQEmail('xxx@qq.com','xxxxx','发件人')
if qqemail.sendQQEmail(
    ['xxx@qq.com'],
    '附件',msg='附件测试',
    type='file',filePaths=['../two/t.py','B.txt'],
    fileNames=['test.txt','B.txt']):
  print('Send successful')
else:
  print('Send failed')

发送图片内容带附件

from smtp.myqqemail import MyQQEmail

msg = '<p>Python 邮件发送测试...</p><p>图片演示:</p><p><img src="cid:image1"><img src="cid:image2"></p>'
qqemail=MyQQEmail('xxx@qq.com','xxx','发件人')
if qqemail.sendQQEmail(
    ['xxx@qq.com'],
    '附件&图片',msg,
    type='file',filePaths=['../two/t.py','B.txt'],
    fileNames=['test.txt','B.txt'],
    imagePaths=['image.jpg','image.jpg']):
  print('Send successful')
else:
  print('Send failed')

最后,修改代码可简化参数type

获取QQ邮箱登陆授权码

设置->账户->

Python实现发送QQ邮件的封装

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
使用Python实现一个简单的项目监控
Mar 31 Python
利用Python脚本实现ping百度和google的方法
Jan 24 Python
Python实现将HTML转换成doc格式文件的方法示例
Nov 20 Python
Python实现的基数排序算法原理与用法实例分析
Nov 23 Python
详解python中的 is 操作符
Dec 26 Python
python正则表达式去除两个特殊字符间的内容方法
Dec 24 Python
浅谈python 读excel数值为浮点型的问题
Dec 25 Python
了解不常见但是实用的Python技巧
May 23 Python
pygame实现俄罗斯方块游戏(基础篇3)
Oct 29 Python
python如何随机生成高强度密码
Aug 19 Python
Python Unittest原理及基本使用方法
Nov 06 Python
Python中time与datetime模块使用方法详解
Mar 31 Python
python记录程序运行时间的三种方法
Jul 14 #Python
python运行其他程序的实现方法
Jul 14 #Python
Python利用递归和walk()遍历目录文件的方法示例
Jul 14 #Python
Python学习教程之常用的内置函数大全
Jul 14 #Python
python与C互相调用的方法详解
Jul 14 #Python
Python django实现简单的邮件系统发送邮件功能
Jul 14 #Python
使用Django Form解决表单数据无法动态刷新的两种方法
Jul 14 #Python
You might like
深思 PHP 数组遍历的差异(array_diff 的实现)
2008/03/23 PHP
PHP函数http_build_query使用详解
2014/08/20 PHP
[企业公众号]升级到[企业微信]之后发送消息失败的解决方法
2017/06/30 PHP
PHP实现数据四舍五入的方法小结【4种方法】
2019/03/27 PHP
中国地区三级联动下拉菜单效果分析
2012/11/15 Javascript
JS 按钮点击触发(兼容IE、火狐)
2013/08/07 Javascript
ext combobox动态加载数据库数据(附前后台)
2014/06/17 Javascript
一个简单的jQuery插件ajaxfileupload.js实现ajax上传文件例子
2014/06/26 Javascript
如何解决ligerUI布局时Center中的Tab高度大小
2015/11/24 Javascript
jquery制做精致的倒计时特效
2016/06/13 Javascript
JavaScript数值千分位格式化的两种简单实现方法
2016/08/01 Javascript
js的OOP继承实现(必看篇)
2017/02/18 Javascript
在vue组件中使用axios的方法
2018/03/16 Javascript
详解如何在你的Vue项目配置vux
2018/06/04 Javascript
Vue.js 实现数据展示全部和收起功能
2018/09/05 Javascript
JSON字符串操作移除空串更改key/value的介绍
2019/01/05 Javascript
js实现百度登录窗口拖拽效果
2020/03/19 Javascript
[02:33]2014DOTA2 TI每日综述 LGD涉险晋级DK闯入胜者组
2014/07/14 DOTA
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
python中文乱码的解决方法
2013/11/04 Python
使用Python中的cookielib模拟登录网站
2015/04/09 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
在Python中操作时间之tzset()方法的使用教程
2015/05/22 Python
深入理解Python中的super()方法
2017/11/20 Python
利用pyshp包给shapefile文件添加字段的实例
2019/12/06 Python
Macbook安装Python最新版本、GUI开发环境、图像处理、视频处理环境详解
2020/02/17 Python
keras训练浅层卷积网络并保存和加载模型实例
2020/07/02 Python
python 统计list中各个元素出现的次数的几种方法
2021/02/20 Python
html5构建触屏网站之网站尺寸探讨
2013/01/07 HTML / CSS
PHP面试题集
2016/12/18 面试题
现金会计岗位职责
2013/12/05 职场文书
关于旷工的检讨书
2014/02/02 职场文书
机关作风整顿个人整改措施思想汇报
2014/09/29 职场文书
商铺租房协议书范本
2014/12/04 职场文书
python opencv通过4坐标剪裁图片
2021/06/05 Python
Spring Boot实现文件上传下载
2022/08/14 Java/Android