基于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计算时间差的方法
May 20 Python
安装ElasticSearch搜索工具并配置Python驱动的方法
Dec 22 Python
Python字典循环添加一键多值的用法实例
Jan 20 Python
Python实现K折交叉验证法的方法步骤
Jul 11 Python
pycharm配置git(图文教程)
Aug 16 Python
python实现高斯(Gauss)迭代法的例子
Nov 20 Python
Python 基于wxpy库实现微信添加好友功能(简洁)
Nov 29 Python
python修改微信和支付宝步数的示例代码
Oct 12 Python
使paramiko库执行命令时在给定的时间强制退出功能的实现
Mar 03 Python
Python入门之基础语法详解
May 11 Python
在NumPy中深拷贝和浅拷贝相关操作的定义和背后的原理
Apr 14 Python
Python&Matlab实现樱花的绘制
Python OpenCV形态学运算示例详解
4种方法python批量修改替换列表中元素
Apr 07 #Python
Python+OpenCV实现图片中的圆形检测
Python中文分词库jieba(结巴分词)详细使用介绍
基于Python实现对比Exce的工具
Apr 07 #Python
pytorch分类模型绘制混淆矩阵以及可视化详解
You might like
PHP用mysql数据库存储session的代码
2010/03/05 PHP
利用laravel+ajax实现文件上传功能方法示例
2017/08/13 PHP
jQuery 改变CSS样式基础代码
2010/02/11 Javascript
jquery.boxy弹出框(后隔N秒后自动隐藏/自动跳转)
2013/01/15 Javascript
推荐10个2014年最佳的jQuery视频插件
2014/11/12 Javascript
js对象的复制继承实例
2015/01/10 Javascript
jQuery中 prop() attr()使用详解
2015/05/19 Javascript
javascript实现输出指定行数正方形图案的方法
2015/08/03 Javascript
Sea.JS知识总结
2016/05/05 Javascript
JS 清除字符串数组中,重复元素的实现方法
2016/05/24 Javascript
Ajax 加载数据 练习代码
2017/01/05 Javascript
Angular2使用Angular-CLI快速搭建工程(二)
2017/05/21 Javascript
js事件委托和事件代理案例分享
2017/07/25 Javascript
分析JS单线程异步io回调的特性
2017/12/01 Javascript
jQuery 实现批量提交表格多行数据的方法
2018/08/09 jQuery
jQuery实现评论模块
2020/08/19 jQuery
解决vue prop传值default属性如何使用,为何不生效的问题
2020/09/21 Javascript
[01:33:07]VGJ.T vs Newbee Supermajor 败者组 BO3 第一场 6.6
2018/06/07 DOTA
[10:18]2018DOTA2国际邀请赛寻真——Fnatic能否笑到最后?
2018/08/14 DOTA
python基础教程之数字处理(math)模块详解
2014/03/25 Python
python去掉行尾的换行符方法
2017/01/04 Python
pyhton列表转换为数组的实例
2018/04/04 Python
Python hashlib常见摘要算法详解
2020/01/13 Python
Python3基于plotly模块保存图片表格
2020/08/03 Python
CSS3五个技巧给你的网站带来出色的效果
2009/04/02 HTML / CSS
浅谈Html5多线程开发之WebWorkers
2018/05/02 HTML / CSS
全球最大的在线旅游公司:Expedia
2017/11/16 全球购物
小学教师办公室制度
2014/02/03 职场文书
庆元旦演讲稿
2014/09/15 职场文书
交通运输局四风问题对照检查材料思想汇报
2014/10/09 职场文书
会计出纳岗位职责
2015/03/31 职场文书
《青山不老》教学反思
2016/02/22 职场文书
python编程项目中线上问题排查与解决
2021/11/01 Python
Redis模仿手机验证码发送的实现示例
2021/11/02 Redis
「地球外少年少女」BD发售宣传CM公开
2022/03/21 日漫
nginx 添加http_stub_status_module模块
2022/05/25 Servers