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中的CURL PycURL使用例子
Jun 01 Python
Python3基础之条件与循环控制实例解析
Aug 13 Python
Python判断Abundant Number的方法
Jun 15 Python
Python中的Descriptor描述符学习教程
Jun 02 Python
python rsa 加密解密
Mar 20 Python
浅谈python import引入不同路径下的模块
Jul 11 Python
利用python实现微信头像加红色数字功能
Mar 26 Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 Python
浅析Python数字类型和字符串类型的内置方法
Dec 22 Python
Python格式化输出--%s,%d,%f的代码解析
Apr 29 Python
Python自省及反射原理实例详解
Jul 06 Python
PyTorch中clone()、detach()及相关扩展详解
Dec 09 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
重置版游戏视频
2020/04/09 魔兽争霸
php 操作符与控制结构
2012/03/07 PHP
在PHP中使用X-SendFile头让文件下载更快
2014/06/01 PHP
thinkphp视图模型查询提示ERR: 1146:Table 'db.pr_order_view' doesn't exist的解决方法
2014/10/30 PHP
ThinkPHP 框架实现的读取excel导入数据库操作示例
2020/04/14 PHP
isArray()函数(JavaScript中对象类型判断的几种方法)
2009/11/26 Javascript
jquery 表单取值常用代码
2009/12/22 Javascript
JavaScript中发布/订阅模式的简单实例
2014/11/05 Javascript
JavaScript中函数(Function)的apply与call理解
2015/07/08 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
javascript 中事件冒泡和事件捕获机制的详解
2017/09/01 Javascript
详解vue项目首页加载速度优化
2017/10/18 Javascript
vue-router路由与页面间导航实例解析
2017/11/07 Javascript
详解html-webpack-plugin插件(用法总结)
2018/09/12 Javascript
vue搜索和vue模糊搜索代码实例
2019/05/07 Javascript
vue项目引入ts步骤(小结)
2019/10/31 Javascript
详解vue或uni-app的跨域问题解决方案
2020/02/21 Javascript
浅析JavaScript中的事件委托机制跟深浅拷贝
2021/01/20 Javascript
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
基于Django contrib Comments 评论模块(详解)
2017/12/08 Python
Python SMTP发送邮件遇到的一些问题及解决办法
2018/10/24 Python
python抓取网页内容并进行语音播报的方法
2018/12/24 Python
如何更优雅地写python代码
2019/07/02 Python
调试Django时打印SQL语句的日志代码实例
2019/09/12 Python
python mqtt 客户端的实现代码实例
2019/09/25 Python
python 的topk算法实例
2020/04/02 Python
python hmac模块验证客户端的合法性
2020/11/07 Python
HTML5页面音视频在微信和app下自动播放的实现方法
2016/10/20 HTML / CSS
美国领先的水果篮送货公司和新鲜水果供应商:The Fruit Company
2018/02/13 全球购物
加拿大专业美发产品购物网站:Chatters
2021/02/28 全球购物
自我评价范文点评
2013/12/04 职场文书
成语的广告词
2014/03/19 职场文书
党校学习党性分析材料
2014/12/19 职场文书
家长会后的感想
2015/08/11 职场文书
K8s部署发布Golang应用程序的实现方法
2021/07/16 Golang
pytorch实现加载保存查看checkpoint文件
2022/07/15 Python