基于PyQt5制作一个群发邮件工具

作者:Python 时间:2022-09-04 01:46:46 

演示示例使用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_())

来源:https://www.cnblogs.com/lwsbc/p/16113978.html

标签:PyQt5,群发,邮件
0
投稿

猜你喜欢

  • SQL Server约束增强的两点建议

    2024-01-28 04:43:10
  • Django 跨域请求处理的示例代码

    2022-05-27 17:08:46
  • Python 中闭包与装饰器案例详解

    2021-08-08 12:28:32
  • 用javascript给表格加滚动条

    2008-10-15 10:03:00
  • SQL Server下几个危险的扩展存储过程

    2024-01-18 06:49:25
  • python 实现视频 图像帧提取

    2023-12-30 19:29:40
  • Vite创建项目的实现步骤

    2024-04-30 10:38:16
  • 阿里开源低代码引擎和生态建设实战及思考

    2023-03-30 05:46:43
  • python基于 Web 实现 m3u8 视频播放的实例

    2022-06-15 22:16:40
  • Mysql到Elasticsearch高效实时同步Debezium实现

    2024-01-25 15:22:46
  • Python数据可视化之绘制柱状图和条形图

    2022-10-19 21:51:46
  • Swin Transformer图像处理深度学习模型

    2022-01-16 22:32:08
  • conda与jupyter notebook kernel核环境不一致的问题解决

    2021-07-03 15:43:02
  • 浅谈python内置函数callable的用法

    2023-01-28 11:12:42
  • 在Python中使用Mako模版库的简单教程

    2021-11-08 12:33:45
  • Python Numpy 数组的初始化和基本操作

    2022-08-28 22:18:23
  • 用ASP生成XBM数字图片验证码

    2008-08-10 18:40:00
  • Python OpenCV Hough直线检测算法的原理实现

    2021-01-29 10:10:00
  • MySQL表操作插入数据insert语句学习(小白入门篇)

    2024-01-14 23:37:49
  • JS操作Cookies的小例子

    2024-06-11 22:17:13
  • asp之家 网络编程 m.aspxhome.com