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脚本生成Android SALT扰码的方法
Sep 18 Python
python自动化测试之从命令行运行测试用例with verbosity
Sep 28 Python
Python使用defaultdict读取文件各列的方法
May 11 Python
Python正则表达式分组概念与用法详解
Jun 24 Python
Python实现抢购IPhone手机
Feb 07 Python
python模糊图片过滤的方法
Dec 14 Python
Django项目创建到启动详解(最全最详细)
Sep 07 Python
Python操作列表常用方法实例小结【创建、遍历、统计、切片等】
Oct 25 Python
Python内建序列通用操作6种实现方法
Mar 26 Python
浅谈django 重载str 方法
May 19 Python
零基础学Python之前需要学c语言吗
Jul 21 Python
python 提取html文本的方法
May 20 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/05/14 PHP
thinkphp3查询mssql数据库乱码解决方法分享
2014/02/11 PHP
PHP微信PC二维码登陆的实现思路
2017/07/13 PHP
PHP实现的DES加密解密类定义与用法示例
2020/11/02 PHP
学习ExtJS table布局
2009/10/08 Javascript
用JavaScript玩转游戏物理(一)运动学模拟与粒子系统
2010/06/19 Javascript
js继承的实现代码
2010/08/05 Javascript
js自动查找select下拉的菜单并选择(示例代码)
2014/02/26 Javascript
JS加载iFrame出现空白问题的解决办法
2016/05/13 Javascript
jQuery实现根据生日计算年龄 星座 生肖
2016/11/23 Javascript
jquery实现的table排序功能示例
2017/03/10 Javascript
详解基于webpack和vue.js搭建开发环境
2017/04/05 Javascript
利用angular、react和vue实现相同的面试题组件
2018/02/19 Javascript
微信小程序框架wepy之动态控制类名
2018/09/14 Javascript
vue中axios实现数据交互与跨域问题
2019/05/12 Javascript
Vue中实现权限控制的方法示例
2019/06/07 Javascript
Python读写Excel文件方法介绍
2014/11/22 Python
Python中的pass语句使用方法讲解
2015/05/14 Python
python机器学习理论与实战(四)逻辑回归
2018/01/19 Python
详解Python核心对象类型字符串
2018/02/11 Python
Python3之简单搭建自带服务器的实例讲解
2018/06/04 Python
对Python实现简单的API接口实例讲解
2018/12/10 Python
对matplotlib改变colorbar位置和方向的方法详解
2018/12/13 Python
Python获取Redis所有Key以及内容的方法
2019/02/19 Python
python实现将json多行数据传入到mysql中使用
2019/12/31 Python
Python统计文本词汇出现次数的实例代码
2020/02/27 Python
Django高并发负载均衡实现原理详解
2020/04/04 Python
Python configparser模块封装及构造配置文件
2020/08/07 Python
python自动化办公操作PPT的实现
2021/02/05 Python
美国折扣地毯销售网站:Rugs.com
2020/03/27 全球购物
财务主管自我鉴定
2014/01/17 职场文书
企业活动策划方案
2014/06/02 职场文书
2014年保密工作总结
2014/11/22 职场文书
送给教师们,到底该如何写好教学反思?
2019/07/02 职场文书
纯 CSS 自定义多行省略的问题(从原理到实现)
2021/11/11 HTML / CSS
Mysql多层子查询示例代码(收藏夹案例)
2022/03/31 MySQL