基于PyQt5制作一个群发邮件工具


Posted in Python onApril 08, 2022

演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。

基于PyQt5制作一个群发邮件工具

基于PyQt5制作一个群发邮件工具

将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_())

以上就是邮件发送的主要代码块了,copy到自己的开发工具中运行即可(前提是你已经安装好了需要的python模块)。

最终效果图

基于PyQt5制作一个群发邮件工具

到此这篇关于基于PyQt5制作一个群发邮件工具的文章就介绍到这了,更多相关PyQt5群发邮件内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Python 相关文章推荐
python和pyqt实现360的CLable控件
Feb 21 Python
Python脚本实现下载合并SAE日志
Feb 10 Python
wxpython中Textctrl回车事件无效的解决方法
Jul 21 Python
python实现决策树、随机森林的简单原理
Mar 26 Python
pandas 对每一列数据进行标准化的方法
Jun 09 Python
基于Tensorflow一维卷积用法详解
May 22 Python
基于python实现破解滑动验证码过程解析
May 28 Python
Python函数必须先定义,后调用说明(函数调用函数例外)
Jun 02 Python
Pandas中DataFrame基本函数整理(小结)
Jul 20 Python
matplotlib.pyplot.plot()参数使用详解
Jul 28 Python
python3从网络摄像机解析mjpeg http流的示例
Nov 13 Python
python自动生成sql语句的脚本
Feb 24 Python
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
Python+OpenCV实现图片中的圆形检测
Python中文分词库jieba(结巴分词)详细使用介绍
基于Python实现对比Exce的工具
Apr 07 #Python
pytorch分类模型绘制混淆矩阵以及可视化详解
You might like
php在线解压ZIP文件的方法
2014/12/30 PHP
浅析PHP中Session可能会引起并发问题
2015/07/23 PHP
WordPress中用于创建以及获取侧边栏的PHP函数讲解
2015/12/29 PHP
php进行ip地址掩码运算处理的方法
2016/07/11 PHP
jQuery 性能优化指南(3)
2009/05/21 Javascript
JQuery一种取同级值的方式(比如你在GridView中)
2012/03/15 Javascript
JavaScript和CSS通过expression实现Table居中显示
2013/06/28 Javascript
写出高效jquery代码的19条指南
2014/03/19 Javascript
如何书写高质量jQuery代码(使用jquery性能问题)
2014/06/30 Javascript
jquery获取当前元素索引值用法实例
2015/06/10 Javascript
jQuery实现指定内容滚动同时左侧或其它地方不滚动的方法
2015/08/08 Javascript
整理Javascript基础入门学习笔记
2015/11/29 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
2016/10/13 Javascript
AngularJS通过ng-route实现基本的路由功能实例详解
2016/12/13 Javascript
canvas绘制万花筒效果(代码分享)
2017/01/20 Javascript
RequireJs的使用详解
2017/02/19 Javascript
JavaScript实现两个select下拉框选项左移右移
2017/03/09 Javascript
值得分享和收藏的xmlplus组件学习教程
2017/05/05 Javascript
原生js轮播特效
2017/05/18 Javascript
Bootstrap Table使用整理(四)之工具栏
2017/06/09 Javascript
vue 项目如何引入微信sdk接口的方法
2017/12/18 Javascript
vue左侧菜单,树形图递归实现代码
2018/08/24 Javascript
angular6根据environments配置文件更改开发所需要的环境的方法
2019/03/06 Javascript
layer iframe 设置关闭按钮的方法
2019/09/12 Javascript
element-ui 文件上传修改文件名的方法示例
2019/11/05 Javascript
VueJS实现用户管理系统
2020/05/29 Javascript
[47:35]VP vs Pain 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/20 DOTA
[01:20:47]DOTA2-DPC中国联赛 正赛 Ehome vs Magma BO3 第一场 1月19日
2021/03/11 DOTA
留学顾问岗位职责
2014/04/14 职场文书
中学生评语大全
2014/04/18 职场文书
政治思想表现评语
2014/05/04 职场文书
2014领导干部学习焦裕禄同志先进事迹思想汇报
2014/09/19 职场文书
中共广东省委常委会党的群众路线教育实践活动整改方案
2014/09/23 职场文书
初任公务员培训心得体会
2016/01/08 职场文书
工作自我评价范文
2019/03/21 职场文书
win11无线投屏在哪设置? win11无线投屏功能的使用方法
2022/04/08 数码科技