本文实例为大家分享了Python实现发送QQ邮件的封装代码,供大家参考,具体内容如下
封装code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
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
发送纯文本
1
2
|
qq = MyQQEmail( '登陆邮箱' , '邮箱授权码' , '发件人' ) qq.sendQQEmail([ '收件人邮箱1' , '收件人邮箱2' ], "标题" , '内容' ) |
发送html
1
2
3
4
5
6
7
8
9
10
11
|
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'保持一致
1
2
3
4
5
6
7
8
9
10
11
|
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为显示名
1
2
3
4
5
6
7
8
9
10
11
|
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' ) |
发送图片内容带附件
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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邮箱登陆授权码
设置->账户->
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持服务器之家。