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重试装饰器示例
Feb 11 Python
python实现线程池的方法
Jun 30 Python
深入学习Python中的装饰器使用
Jun 20 Python
Django1.7+python 2.78+pycharm配置mysql数据库
Oct 09 Python
详解Python 实现元胞自动机中的生命游戏(Game of life)
Jan 27 Python
python3 requests中使用ip代理池随机生成ip的实例
May 07 Python
django多个APP的urls设置方法(views重复问题解决)
Jul 19 Python
Pytorch Tensor的统计属性实例讲解
Dec 30 Python
python3实现网页版raspberry pi(树莓派)小车控制
Feb 12 Python
Python爬虫之Spider类用法简单介绍
Aug 04 Python
python获取淘宝服务器时间的代码示例
Apr 22 Python
pytorch 使用半精度模型部署的操作
May 24 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开发工具之vs2005图解
2008/01/12 PHP
PHP校验ISBN码的函数代码
2011/01/17 PHP
php不使用插件导出excel的简单方法
2014/03/04 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
javascript onkeydown,onkeyup,onkeypress,onclick,ondblclick
2009/02/04 Javascript
js 弹出框 替代浏览器的弹出框
2010/10/29 Javascript
jQuery学习笔记之jQuery的事件
2010/12/22 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
JavaScript中5种调用函数的方法
2015/03/12 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
Jquery使用小技巧汇总
2015/12/29 Javascript
第二篇Bootstrap起步
2016/06/21 Javascript
js仿百度切换皮肤功能(html+css)
2016/07/10 Javascript
AngularJS 基础ng-class-even指令用法
2016/08/01 Javascript
JavaScript 事件流、事件处理程序及事件对象总结
2017/04/01 Javascript
浅析JS中什么是自定义react数据验证组件
2018/10/19 Javascript
vue element和nuxt的使用技巧分享
2021/01/14 Vue.js
Python 查找字符在字符串中的位置实例
2018/05/02 Python
解决django model修改添加字段报错的问题
2019/11/18 Python
如何将你的应用迁移到Python3的三个步骤
2019/12/22 Python
python 等差数列末项计算方式
2020/05/03 Python
python 获取字典特定值对应的键的实现
2020/09/29 Python
pandas针对excel处理的实现
2021/01/15 Python
德国Discount-Apotheke中文官网:DC德式康线上药房
2020/02/18 全球购物
XMLHttpRequest对象在IE和Firefox中创建方式有没有不同
2016/03/23 面试题
实习教师自我鉴定
2013/09/27 职场文书
职高毕业生自我鉴定
2013/10/21 职场文书
生日派对邀请函
2014/01/13 职场文书
向领导表决心的话
2014/03/11 职场文书
《山谷中的谜底》教学反思
2014/04/26 职场文书
公司年会策划方案
2014/05/17 职场文书
2014年班主任工作总结
2014/11/08 职场文书
巾帼文明岗汇报材料
2014/12/24 职场文书
小学四年级作文之人物作文
2019/11/06 职场文书
Java Shutdown Hook场景使用及源码分析
2021/06/15 Java/Android