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实现同时给多个变量赋值的方法
Apr 30 Python
python3.4用函数操作mysql5.7数据库
Jun 23 Python
Python分析彩票记录并预测中奖号码过程详解
Jul 09 Python
python中类的输出或类的实例输出为这种形式的原因
Aug 12 Python
Python类中方法getitem和getattr详解
Aug 30 Python
PYTHON EVAL的用法及注意事项解析
Sep 06 Python
Python提取PDF内容的方法(文本、图像、线条等)
Sep 25 Python
python pygame实现挡板弹球游戏
Nov 25 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
Python判断字符串是否为合法标示符操作
Sep 03 Python
pycharm激活方法到2099年(激活流程)
Sep 22 Python
Python实现手势识别
Oct 21 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数组中的重复值的实现代码
2011/07/17 PHP
PHP实现的一致性Hash算法详解【分布式算法】
2018/03/31 PHP
JS 建立对象的方法
2007/04/21 Javascript
ExtJS 2.0实用简明教程 之Border区域布局
2009/04/29 Javascript
javacript使用break内层跳出外层循环分析
2015/01/12 Javascript
js实现仿百度瀑布流的方法
2015/02/05 Javascript
JavaScript使用二分查找算法在数组中查找数据的方法
2015/04/07 Javascript
nodejs调用cmd命令实现复制目录
2015/05/04 NodeJs
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
浅谈js中字符和数组一些基本算法题
2016/08/15 Javascript
浅谈javascript:两种注释,声明变量,定义函数
2016/09/29 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
Vue Element使用icon图标教程详解(第三方)
2018/02/07 Javascript
axios的拦截请求与响应方法
2018/08/11 Javascript
Angularjs实现数组随机排序的方法
2018/10/02 Javascript
js实现删除li标签一行内容
2019/04/16 Javascript
node基于async/await对mysql进行封装
2019/06/20 Javascript
Vue.js+cube-ui(Scroll组件)实现类似头条效果的横向滚动导航条
2019/06/24 Javascript
通过实例了解JS执行上下文运行原理
2020/06/17 Javascript
vue 全局封装loading加载教程(全局监听)
2020/11/05 Javascript
[04:03]DOTA2英雄梦之声_第02期_风暴之灵
2014/06/30 DOTA
Python的Django框架中从url中捕捉文本的方法
2015/07/20 Python
使用python生成目录树
2018/03/29 Python
python 抓包保存为pcap文件并解析的实例
2019/07/23 Python
Python为何不支持switch语句原理详解
2020/10/21 Python
html5 的a标签 Href 拨电话的写法
2013/11/04 HTML / CSS
解析浏览器的一些“滚动”行为鉴赏
2019/09/16 HTML / CSS
英国地毯卖家:The Rug Seller
2019/07/18 全球购物
银行职业规划书范文
2013/12/28 职场文书
爱岗敬业演讲稿范文
2014/01/14 职场文书
灰雀教学反思
2014/04/28 职场文书
大学专科自荐信
2014/06/17 职场文书
2015年中秋节演讲稿
2015/03/20 职场文书
2015年禁毒宣传活动总结
2015/03/25 职场文书
2016小学教师读书心得体会
2016/01/13 职场文书
解决Nginx 配置 proxy_pass 后 返回404问题
2021/03/31 Servers