基于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服务器端收发请求的实现代码
Sep 29 Python
Python中字典的基本知识初步介绍
May 21 Python
详解Django框架中的视图级缓存
Jul 23 Python
详解python3百度指数抓取实例
Dec 12 Python
Python函数式编程
Jul 20 Python
Python中if elif else及缩进的使用简述
May 31 Python
Python迭代器与生成器用法实例分析
Jul 09 Python
python 3.3 下载固定链接文件并保存的方法
Dec 18 Python
Python编程flask使用页面模版的方法
Dec 28 Python
Python3.5多进程原理与用法实例分析
Apr 05 Python
python绘制雪景图
Dec 16 Python
基于CentOS搭建Python Django环境过程解析
Aug 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中strtotime函数使用方法详解
2011/11/27 PHP
Zend Framework教程之配置文件application.ini解析
2016/03/10 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
老生常谈PHP数组函数array_merge(必看篇)
2017/05/25 PHP
Yii2.0框架模型添加/修改/删除数据操作示例
2019/07/18 PHP
20个非常有用的PHP类库 加速php开发
2010/01/15 Javascript
原生js封装二级城市下拉列表的实现代码
2016/06/16 Javascript
HTML中setCapture、releaseCapture 使用方法浅析
2016/09/25 Javascript
使用canvas及js简单生成验证码方法
2017/04/02 Javascript
Vue+axios 实现http拦截及路由拦截实例
2017/04/25 Javascript
node.js博客项目开发手记
2018/03/16 Javascript
express启用https使用小记
2019/05/21 Javascript
React实现类似淘宝tab居中切换效果的示例代码
2020/06/02 Javascript
[00:59]DOTA2背景故事第二期之四大基本法则
2020/07/07 DOTA
python 实现tar文件压缩解压的实例详解
2017/08/20 Python
python+matplotlib实现礼盒柱状图实例代码
2018/01/16 Python
python3解析库BeautifulSoup4的安装配置与基本用法
2018/06/26 Python
python远程连接MySQL数据库
2019/04/19 Python
python实现nao机器人身体躯干和腿部动作操作
2019/04/29 Python
Django网络框架之创建虚拟开发环境操作示例
2019/06/06 Python
解决Python内层for循环如何break出外层的循环的问题
2019/06/24 Python
Python FTP文件定时自动下载实现过程解析
2019/11/12 Python
Python如何读取、写入JSON数据
2020/07/28 Python
利用python清除移动硬盘中的临时文件
2020/10/28 Python
python中的yield from语法快速学习
2020/11/06 Python
利用Python实现学生信息管理系统的完整实例
2020/12/30 Python
原生canvas制作画图小工具的踩坑和爬坑
2020/06/09 HTML / CSS
美国存储和组织商店:The Container Store
2017/08/16 全球购物
英国团购网站:Groupon英国
2017/11/28 全球购物
沙特阿拉伯网上购物:Sayidaty Mall
2018/05/06 全球购物
化学实验员岗位职责
2013/12/28 职场文书
英语专业学生个人求职信范文
2014/01/06 职场文书
2015年医务科工作总结范文
2015/05/26 职场文书
培训班开班主持词
2015/07/02 职场文书
创业计划书之蛋糕店
2019/08/29 职场文书
nginx实现动静分离的方法示例
2021/11/07 Servers