基于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中expandtabs()方法的使用
May 18 Python
python版本的读写锁操作方法
Apr 25 Python
python连接mysql实例分享
Oct 09 Python
python 表达式和语句及for、while循环练习实例
Jul 07 Python
简单谈谈python中的语句和语法
Aug 10 Python
python2.7无法使用pip的解决方法(安装easy_install)
Apr 03 Python
python中virtualenvwrapper安装与使用
May 20 Python
Flask框架使用DBUtils模块连接数据库操作示例
Jul 20 Python
Django之使用celery和NGINX生成静态页面实现性能优化
Oct 08 Python
python 实现查询Neo4j多节点的多层关系
Dec 23 Python
Python 解析pymysql模块操作数据库的方法
Feb 18 Python
浅析python标准库中的glob
Mar 13 Python
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
Python+OpenCV实现图片中的圆形检测
Python中文分词库jieba(结巴分词)详细使用介绍
基于Python实现对比Exce的工具
Apr 07 #Python
pytorch分类模型绘制混淆矩阵以及可视化详解
You might like
php面向对象全攻略 (一) 面向对象基础知识
2009/09/30 PHP
PHP CURL模拟GET及POST函数代码
2010/04/25 PHP
JavaScript的Cookies
2008/01/16 Javascript
javascript 面向对象 function类
2010/05/13 Javascript
JS面向对象编程 for Cookie
2010/09/19 Javascript
String.prototype实现的一些javascript函数介绍
2013/11/22 Javascript
JQUERY dialog的用法详细解析
2013/12/19 Javascript
取得元素的左和上偏移量的方法
2014/09/17 Javascript
完美兼容各大浏览器的jQuery插件实现图片切换特效
2014/12/12 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
深入理解Java线程编程中的阻塞队列容器
2015/12/07 Javascript
AngularJs解决跨域问题案例详解(简单方法)
2016/05/19 Javascript
jQuery提示插件qTip2用法分析(支持ajax及多种样式)
2016/06/08 Javascript
利用bootstrapValidator验证UEditor
2016/09/14 Javascript
js运动事件函数详解
2016/10/21 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
基于 webpack2 实现的多入口项目脚手架详解
2017/06/26 Javascript
使用layer弹窗和layui表单实现新增功能
2018/08/09 Javascript
如何为你的JS项目添加智能提示与类型检查详解
2019/03/12 Javascript
vue项目中微信登录的实现操作
2020/09/08 Javascript
简单的Apache+FastCGI+Django配置指南
2015/07/22 Python
Python设计模式之抽象工厂模式原理与用法详解
2019/01/15 Python
pthon贪吃蛇游戏详细代码
2019/01/27 Python
Python递归及尾递归优化操作实例分析
2020/02/01 Python
pycharm不能运行.py文件的解决方法
2020/02/12 Python
利用4行Python代码监测每一行程序的运行时间和空间消耗
2020/04/22 Python
加热夹克:RAVEAN
2018/10/19 全球购物
兰蔻法国官方网站:Lancôme法国
2020/02/22 全球购物
伦敦奥运会口号
2014/06/13 职场文书
2015年重阳节主持词
2015/07/04 职场文书
2015年教导处教学工作总结
2015/07/22 职场文书
MySQL命令行操作时的编码问题详解
2021/04/14 MySQL
SQL 窗口函数实现高效分页查询的案例分析
2021/05/21 SQL Server
详解pytorch创建tensor函数
2022/03/22 Python
vue实现列表垂直无缝滚动
2022/04/08 Vue.js
pd.drop_duplicates删除重复行的方法实现
2022/06/16 Python