基于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基础教程之对象和类的实际运用
Aug 29 Python
简介二分查找算法与相关的Python实现示例
Aug 26 Python
python字符类型的一些方法小结
May 16 Python
Python中对象迭代与反迭代的技巧总结
Sep 17 Python
Python基于正则表达式实现检查文件内容的方法【文件检索】
Aug 30 Python
Python学习之用pygal画世界地图实例
Dec 07 Python
Python字符串大小写转换拼接删除空白
Sep 19 Python
python中JWT用户认证的实现
May 18 Python
keras读取h5文件load_weights、load代码操作
Jun 12 Python
如何实现一个python函数装饰器(Decorator)
Oct 12 Python
Python实现哲学家就餐问题实例代码
Nov 09 Python
Python系统公网私网流量监控实现流程
Nov 23 Python
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
Python+OpenCV实现图片中的圆形检测
Python中文分词库jieba(结巴分词)详细使用介绍
基于Python实现对比Exce的工具
Apr 07 #Python
pytorch分类模型绘制混淆矩阵以及可视化详解
You might like
虹吸式咖啡探讨–研磨
2021/03/03 冲泡冲煮
php5数字型字符串加解密代码
2008/04/24 PHP
PHP面向对象三大特点学习(充分理解抽象、封装、继承、多态)
2012/05/07 PHP
jQuery+php实现ajax文件即时上传的详解
2013/06/17 PHP
使用array_map简单搞定PHP删除文件、删除目录
2014/10/29 PHP
PHP数据对象PDO操作技巧小结
2016/09/27 PHP
js数据验证集合、js email验证、js url验证、js长度验证、js数字验证等简单封装
2010/05/15 Javascript
基于JQuery的类似新浪微博展示信息效果的代码
2012/07/23 Javascript
JS 对输入框进行限制(常用的都有)
2013/07/30 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
js中判断对象是否为空的三种实现方法
2013/12/23 Javascript
使用简洁的jQuery方法实现隔行换色功能
2014/01/02 Javascript
js浏览器本地存储store.js介绍及应用
2014/05/13 Javascript
get(0).tagName获得作用标签示例代码
2014/10/08 Javascript
JS实现仿腾讯微博无刷新删除微博效果代码
2015/10/16 Javascript
跟我学习javascript的this关键字
2020/05/28 Javascript
html5+javascript实现简单上传的注意细节
2016/04/18 Javascript
JS跨域请求的问题解析
2018/12/03 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
2020/11/10 Javascript
Python 时间操作例子和时间格式化参数小结
2014/04/24 Python
关于numpy中np.nonzero()函数用法的详解
2017/02/07 Python
Django中redis的使用方法(包括安装、配置、启动)
2018/02/21 Python
python实现人脸识别经典算法(一) 特征脸法
2018/03/13 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
selenium+python设置爬虫代理IP的方法
2018/11/29 Python
基于Python生成个性二维码过程详解
2020/03/05 Python
python/golang 删除链表中的元素
2020/09/14 Python
2分钟教你实现环形/扇形菜单(基础版)
2020/01/15 HTML / CSS
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
Pharmacy Online中文直邮网站:澳洲大型药房
2020/06/27 全球购物
机械设计职业生涯规划书
2013/12/27 职场文书
《高尔基和他的儿子》教学反思
2014/04/09 职场文书
2014小学一年级班主任工作总结
2014/12/05 职场文书
2019入党申请书格式和范文
2019/06/25 职场文书
SQL SERVER中常用日期函数的具体使用
2021/04/08 SQL Server
Python基础之hashlib模块详解
2021/05/06 Python