基于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 相关文章推荐
python3使用tkinter实现ui界面简单实例
Jan 10 Python
Python的网络编程库Gevent的安装及使用技巧
Jun 24 Python
Python处理json字符串转化为字典的简单实现
Jul 07 Python
python中的迭代和可迭代对象代码示例
Dec 27 Python
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
Python零基础入门学习之输入与输出
Apr 03 Python
python 基于TCP协议的套接字编程详解
Jun 29 Python
windows安装TensorFlow和Keras遇到的问题及其解决方法
Jul 10 Python
Django用户登录与注册系统的实现示例
Jun 03 Python
python3爬虫中异步协程的用法
Jul 10 Python
PyQt5-QDateEdit的简单使用操作
Jul 12 Python
python中Matplotlib绘制直线的实例代码
Jul 04 Python
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
Python+OpenCV实现图片中的圆形检测
Python中文分词库jieba(结巴分词)详细使用介绍
基于Python实现对比Exce的工具
Apr 07 #Python
pytorch分类模型绘制混淆矩阵以及可视化详解
You might like
php REMOTE_ADDR之获取访客IP的代码
2008/04/22 PHP
php中字符集转换iconv函数使用总结
2014/10/11 PHP
php+html5实现无刷新图片上传教程
2016/01/22 PHP
PHP实现的折半查询算法示例
2017/10/09 PHP
extjs fckeditor集成代码
2009/05/10 Javascript
jQuery 下拉列表 二级联动插件分享
2012/03/29 Javascript
js实现跨域的多种方法
2015/12/25 Javascript
jQuery 利用$.ajax 时获取原生XMLHttpRequest 对象的方法
2016/08/25 Javascript
jQuery树形插件jquery.simpleTree.js用法分析
2016/09/05 Javascript
JavaScript严格模式详解
2017/01/16 Javascript
AngularJs 利用百度地图API 定位当前位置 获取地址信息
2017/01/18 Javascript
详解webpack分离css单独打包
2017/06/21 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
使用watch监听路由变化和watch监听对象的实例
2018/02/24 Javascript
Angular-UI Bootstrap组件实现警报功能
2018/07/16 Javascript
Vue性能优化的方法
2020/07/30 Javascript
JavaScript Blob对象原理及用法详解
2020/10/14 Javascript
[02:12]Dota 2 推出全新英雄—— 电炎绝手
2019/08/23 DOTA
zbar解码二维码和条形码示例
2014/02/07 Python
python离线安装外部依赖包的实现
2020/02/13 Python
解决Python中报错TypeError: must be str, not bytes问题
2020/04/07 Python
keras用auc做metrics以及早停实例
2020/07/02 Python
用pandas划分数据集实现训练集和测试集
2020/07/20 Python
html5+css3之动画在webapp中的应用
2014/11/21 HTML / CSS
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
Aerosoles爱柔仕官网:美国舒软女鞋品牌
2017/07/17 全球购物
波兰电子产品购物网站:Vobis
2019/05/26 全球购物
法国滑雪假期的专家:Ski Planet
2019/11/02 全球购物
求职信的要素有哪些呢
2013/12/26 职场文书
行政助理的岗位职责
2014/02/18 职场文书
六查六看心得体会
2014/10/14 职场文书
公司介绍信范文
2015/01/31 职场文书
2016年大学生党员承诺书
2016/03/24 职场文书
公务员的复习计划书,请收下!
2019/07/15 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
python实现黄金分割法的示例代码
2021/04/28 Python