基于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 (1)
Oct 31 Python
python简单程序读取串口信息的方法
Mar 13 Python
Python二分查找详解
Sep 13 Python
Python2.7读取PDF文件的方法示例
Jul 13 Python
Python3.x对JSON的一些操作示例
Sep 01 Python
python 信息同时输出到控制台与文件的实例讲解
May 11 Python
python中的字符串内部换行方法
Jul 19 Python
Python将string转换到float的实例方法
Jul 29 Python
python3-flask-3将信息写入日志的实操方法
Nov 12 Python
python的slice notation的特殊用法详解
Dec 27 Python
基于python实现简单网页服务器代码实例
Sep 14 Python
Python常用配置文件ini、json、yaml读写总结
Jul 09 Python
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
Python+OpenCV实现图片中的圆形检测
Python中文分词库jieba(结巴分词)详细使用介绍
基于Python实现对比Exce的工具
Apr 07 #Python
pytorch分类模型绘制混淆矩阵以及可视化详解
You might like
?生?D片??C字串
2006/12/06 PHP
php array_flip() 删除数组重复元素
2009/01/14 PHP
PHP之APC缓存详细介绍 apc模块安装
2014/01/13 PHP
smarty模板局部缓存方法使用示例
2014/06/17 PHP
Jquery实现显示和隐藏的4种简单方式
2013/08/28 Javascript
javascript的创建多行字符串的7种方法
2014/04/29 Javascript
jQuery中scrollLeft()方法用法实例
2015/01/16 Javascript
js实现文本框选中的方法
2015/05/26 Javascript
简单介绍jsonp 使用小结
2016/01/27 Javascript
移动端翻页插件dropload.js(支持Zepto和jQuery)
2016/07/27 Javascript
BootStrap selectpicker后台动态绑定数据
2017/06/01 Javascript
基于JS实现移动端左滑删除功能
2017/07/28 Javascript
JS实现的简单表单验证功能完整实例
2017/10/14 Javascript
浅谈es6 javascript的map数据结构
2017/12/14 Javascript
node.js之基础加密算法模块crypto详解
2018/09/11 Javascript
实例分析Array.from(arr)与[...arr]到底有何不同
2019/04/09 Javascript
vue v-for出来的列表,点击某个li使得当前被点击的li字体变红操作
2020/07/17 Javascript
vue中keep-alive、activated的探讨和使用详解
2020/07/26 Javascript
Python处理字符串之isspace()方法的使用
2015/05/19 Python
Python中List.count()方法的使用教程
2015/05/20 Python
python 读文件,然后转化为矩阵的实例
2018/04/23 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
python之消除前缀重命名的方法
2018/10/21 Python
Numpy截取指定范围内的数据方法
2018/11/14 Python
Python实现html转换为pdf报告(生成pdf报告)功能示例
2019/05/04 Python
python实现合并多个list及合并多个django QuerySet的方法示例
2019/06/11 Python
Python 中Django验证码功能的实现代码
2019/06/20 Python
你不知道的葡萄干处理法、橙蜜处理法、二氧化碳酵母法
2021/03/17 冲泡冲煮
英国最大的手表网站:The Watch Hut
2017/03/31 全球购物
英国图书音像网站:Hive.co.uk(图书、电子书、DVD、蓝光、音乐CD等)
2017/10/16 全球购物
博士毕业生自我鉴定范文
2014/04/13 职场文书
在职党员进社区活动总结
2014/07/05 职场文书
2015年六一儿童节活动总结
2015/02/11 职场文书
教师个人年终总结
2015/02/11 职场文书
《走遍天下书为侣》教学反思
2016/02/22 职场文书
Python 文字识别
2022/05/11 Python