Python封装QQ邮件发送类:支持纯文本、HTML、图片及附件
本文介绍了一个Python实现的QQ邮件发送封装类,支持纯文本、HTML、带本地图片的HTML以及附件发送。通过配置发件人、授权码及收件人,可灵活调用sendQQEmail方法完成各类邮件发送任务,适用于自动化通知、报告生成等场景。
本文分享了一个使用Python编写的QQ邮件发送封装代码示例,供读者参考学习。
以下是核心封装代码的实现部分。
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
接下来展示具体的使用示例。
演示如何发送纯文本邮件。
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')
演示如何发送包含本地图片内容的邮件。
请注意,HTML中<img>标签引用的cid标识(如image1、image2)必须与代码中imagePaths列表里的索引顺序保持一致,否则图片无法正确显示。
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')
最后,开发者可以根据实际需求修改代码,简化传入的参数类型,以提高调用便捷性。
在使用前,需要先获取QQ邮箱的登录授权码。
获取路径为:登录QQ邮箱后,进入设置,选择账户选项。

以上就是本文的全部内容,希望能为读者的学习提供一定帮助,也欢迎大家继续支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













