PyQT 跟我学做密码管理器(5) —— 备份数据到邮箱
声明:本文借鉴https://blog.youkuaiyun.com/bigbennyguo/article/details/50755207 修改而来
前言
借鉴的文章是基于python2+pyqt4,本文是基于python3+pyqt5
环境
编辑器:Sublime Text3
操作系统:win10
Python3
所需要的库:主要是PyQT5,因为加了一点拓展功能,所以还有sqlite3,Image,pyinstaller
pip3 install pyqt5
pip3 install pyqt5-tools
pip3 install sqilte3
pip3 install Image
pip3 install pyinstaller
首先是pyqt5, 这个是我们的主要工具,用来做界面的,pyqt5-tools这个库主要是是在用QT Creator设计好界面之后,将ui文件转化为py文件;
sqlite3这个库可以安也可以不安,因为pyqt5里面有一个模块QtSql,它支持sqlite的操作;
Image这个库主要是用来处理一下图片资源,以及最后程序的图标的
pyinstaller 最后将程序转化为可执行的exe文件
邮箱登陆
python自带的smtblib库可以登陆邮箱,本文主要介绍如何登陆邮箱
如果是公司自己的邮箱,可能直接使用smtplib.SMTP().login()也许就登陆上去了
每个公司的邮箱可能不一样,这里介绍qq/163的邮箱登陆
使用python来登陆qq/163邮箱,第一件事,得从邮箱里面获取授权码
授权码应该是一个16位字母组成的
拿到授权码之后,我们就可以进行邮箱登陆了
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
class SendEmail():
global send_user
global email_host
global password
global user_list
global sub
password = "" #授权码
email_host = "smtp.qq.com" #邮箱host,如果是163的,则是smtp.163.com
send_user = "123@qq.com" #自己的qq邮箱账户或者163账户
user_list = ['123@qq.com','123@163.com'] #收件人列表
sub = "密码管理系统-密码备份" #邮件主题
def __init__(self):
self.server = smtplib.SMTP_SSL()
self.server.connect(email_host,465)
code,resp=self.server.login(send_user,password) #登陆邮箱
if code in (235, 503): #登陆成功的话,code应该为235,已经登陆过的话,code应该是503
print('login success')
else:
print('没有登陆成功')
return
如果登陆成功之后呢,就可以开始构造邮件了,构造邮件用到了python自带的email模块
如下:
user = "shape" + "<" + send_user + ">" #组装邮件消息头,包括收件人,发件人,邮件主题
self.message = MIMEMultipart('mixed')
self.message['Subject'] = sub
self.message['From'] = user
self.message['To'] = ";".join(user_list)
邮件正文:
text_plain = MIMEText(content,'plain', 'utf-8')
邮件附件:
#构造附件
sendfile=open(filename,'rb').read()
text_att = MIMEText(sendfile, 'base64', 'utf-8')
text_att["Content-Type"] = 'application/octet-stream'
new_name=filename.split('\\')[-1]
print(new_name)
text_att.add_header('Content-Disposition', 'attachment', filename=new_name)
完整的邮件类如下:
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
class SendEmail():
global send_user
global email_host
global password
global user_list
global sub