【浏览全文】
演示示例应用QQ邮箱发送邮件,先获取本人的QQ邮箱的受权码。因为前面发送邮件时须要应用本人的受权码作为邮箱的明码登录邮箱最初达到发送邮件的目标。
将UI解决的相干的界面包导入进来
from PyQt5.QtWidgets import *from PyQt5.QtCore import *from PyQt5.QtGui import *# 利用操作相干的库import sys# 邮件发送相干的库import smtplibfrom 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模块)。
有须要下载残缺源代码请在公众号内回复'批量邮件工具'即可获取下载链接。
【往期精选】
python 一行命令开启网络间的文件共享...
PyQt5 批量删除 Excel 反复数据,多个文件、自定义反复项一键删除...
再见XShell,这款国人开源的终端命令行工具更nice!
python 表情包下载器,轻松下载上万个表情包、斗图不必愁...
Python 主动清理电脑垃圾文件,一键启动即可...
有了jmespath,解决python中的json数据就变成了一种享受...
解锁一个新技能,如何在Python代码中应用表情包...
万能的list列表,python中的堆栈、队列实现全靠它!
该怎么用pyqt5来实现数据的增、删、改、查性能...
介绍一个文本语音神器,几行代码就能搞定!
python批量主动整顿文件
初学者福利:分享五个收费的 Python 学习网站,放松珍藏吧!