基于PyQt5制作一个群发邮件工具
作者:Python 发布时间:2022-09-04 01:46:46
标签:PyQt5,群发,邮件
演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。
将UI处理的相关的界面包导入进来
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
from PyQt5.QtGui import *
# 应用操作相关的库
import sys
# 邮件发送相关的库
import smtplib
from email.mime.text import MIMEText
为了不和邮件发送的UI界面主线程产生冲突,使用QThread子线程的方式制作邮件发送。
class EmailWork(QThread):
trigger = pyqtSignal(str)
finished = pyqtSignal(bool)
def __init__(self, parent=None):
super(EmailWork, self).__init__(parent)
self.parent = parent
self.working = True
def __del__(self):
self.working = False
self.wait()
def run(self):
email_subject_text = self.parent.email_subject_text.text().strip()
recipient_text = self.parent.recipient_text.text().strip()
current_text = self.parent.current_text.toPlainText().strip()
print(email_subject_text)
print(recipient_text)
print(current_text)
self.trigger.emit("邮件信息读取完成!")
# 发件人邮箱
send_email_name = '1342929047@qq.com'
# 发件人授权码
passwd = 'fjyjqlzxprzihcii'
self.trigger.emit(send_email_name)
self.trigger.emit("发件人信息初始化完成!")
# 收件人邮箱
msg_to = recipient_text.split(';')
self.trigger.emit(recipient_text)
self.trigger.emit("收件人信息初始化完成!")
print(msg_to)
# 设置邮件
msg = MIMEText(current_text)
msg['subject'] = email_subject_text
# 设置发件人
msg['From'] = '一匹来自北方的狼'
# 设置收件人
msg['To'] = ';'.join(msg_to)
# 连接服务器
smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
self.trigger.emit("服务器连接成功!")
# 登录邮箱
smtp.login(send_email_name, passwd)
self.trigger.emit("邮箱登录成功!")
# 发送邮件
smtp.sendmail(send_email_name, msg_to, msg.as_string())
self.trigger.emit("邮件发送成功!")
self.finished.emit(True)
下面是主页面的UI布局及信号量的代码块。
class StmpEmail(QWidget):
def __init__(self):
super(StmpEmail, self).__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('批量邮件工具 公众号:[Python 集中营]')
self.setWindowIcon(QIcon('邮件.ico'))
self.setFixedSize(500, 400)
hbox = QHBoxLayout()
self.send_btn = QPushButton()
self.send_btn.setText('发送')
self.send_btn.clicked.connect(self.send_btn_click)
self.brower = QTextBrowser()
self.brower.setFont(QFont('宋体', 8))
self.brower.setReadOnly(True)
self.brower.setPlaceholderText('执行进度显示区域...')
self.brower.ensureCursorVisible()
hbox.addWidget(self.send_btn)
self.email_subject_text = QLineEdit()
self.email_subject_text.setPlaceholderText('请输入主题')
self.recipient_text = QLineEdit()
self.recipient_text.setPlaceholderText('请输入收件人,示例:134047@qq.com;092837@163.com')
self.current_text = QTextEdit()
self.current_text.setPlaceholderText('请输入邮件正文')
self.thread_ = EmailWork(self)
self.thread_.trigger.connect(self.update_log)
self.thread_.finished.connect(self.finished)
vbox = QVBoxLayout()
vbox.addWidget(self.email_subject_text)
vbox.addWidget(self.recipient_text)
vbox.addWidget(self.current_text)
vbox.addWidget(self.brower)
vbox.addLayout(hbox)
self.setLayout(vbox)
def update_log(self, text):
'''
槽函数:向文本浏览器中写入内容
:param text:
:return:
'''
cursor = self.brower.textCursor()
cursor.movePosition(QTextCursor.End)
self.brower.append(text)
self.brower.setTextCursor(cursor)
self.brower.ensureCursorVisible()
def finished(self, finished):
if finished is True:
self.send_btn.setEnabled(True)
def send_btn_click(self):
self.send_btn.setEnabled(False)
self.thread_.start()
最后,通过main函数将页面布局加入主体循环即可。
if __name__ == '__main__':
app = QApplication(sys.argv)
main = StmpEmail()
main.show()
sys.exit(app.exec_())
来源:https://www.cnblogs.com/lwsbc/p/16113978.html
0
投稿
猜你喜欢
- 什么是 JScript?JScript 是由微软开发的活动脚本语言,基于 ECMAScript 规范实现。Internet Explorer
- 如果进入了shell交互窗口,python的退出方式只能够用函数不能够用命令,这有时候让人感觉到很不习惯。因为函数会比命令多一个括号的输入,
- 广州4.18书友会主题的内容提纲自己参与撰写,同时还参与组织和主持。通过这次的深入参与,我发现胡晓同学能坚持下来多不容易,先赞下。由于天公不
- 一.基于纹理背景的图像分割该部分主要讲解基于图像纹理信息(颜色)、边界信息(反差)和背景信息的图像分割算法。在OpenCV中,GrabCut
- 0.引言利用python开发,借助Dlib库捕获摄像头中的人脸,提取人脸特征,通过计算欧氏距离来和预存的人脸特征进行对比,达到人脸识别的目的
- 很多网站需要将好的会员号留着,或用于日后的盈利。实现方法不是本文讨论范围,本文仅列出用于检测靓号类型的一些正则。靓号检测:主要可以检测连号(
- 为了方便使用分类,我定义了一个分类表category,里面字段是id(自动编号) cat_name(分类名) pare
- 去年淘宝做了个“胖子”项目,就是把网页的默认宽度从780提升到了950。也就是说,基本放弃了800×600的用户(没有完全放弃,如果你仔细研
- 一、调用百度接口进行人脸属性识别安装好baidu-aip模块,获取了百度AI接口密钥后,即可调用百度接口进行人脸属性识别了。首先以杨紫的图片
- Access数据库,同时操作大量记录(9500条以上)时报错。错误提示:Microsoft JET Database Engine 错误 &
- 1. 换源,sohu的相当好用。 1.1备份CentOS-Base.repo cd /etc/yum.repos.d/ cp CentOS-
- 情景是这样的:在C#中调用python脚本进行post请求,python脚本中使用了requests包。Python的开发环境我们有比较多的
- 相信很多人像我一样在学习python,pandas过程中对数据的选取和修改有很大的困惑(也许是深受Matlab)的影响。。。到今天终于完全搞
- 这里是一个使用日期函数的例子。下面的查询选择了所有记录,其date_col的值是在最后30天以内: mysql>
- 转自微信公众号:机器学习社区,经作者授权转载时间序列分析是数据科学中一个非常重要的领域,它主要包含统计分析、检测变化点、异常检测和预测未来趋
- 我从11岁开始编程,并且一直都很喜欢技术和编程。这些是我一直以来获得的经验教训。作为一个程序员,你可能需要这样的忠告。我更希望每个人在获取这
- 列表是Python中最基本的数据结构,列表是最常用的Python数据类型,列表的数据项不需要具有相同的类型。列表中的每个元素都分配一个数字
- 很多时候关心的是优化SELECT 查询,因为它们是最常用的查询,而且确定怎样优化它们并不总是直截了当。相对来说,将数据装入数据库是直截了当的
- 做图像识别的时候需要在图片中画出特定大小和角度的矩形框,自己写了一个函数,给定的输入是图片名称,矩形框的位置坐标,长宽和角度,直接输出画好矩
- 大家在没有阅读本文之前先看下python的基本概念,Python是一种解释型、面向对象、动态数据类型的高级程序设计语言。Python由Gui