站在用户的角度思考问题,与客户深入沟通,找到博罗网站设计与博罗网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都做网站、成都网站建设、企业官网、英文网站、手机端网站、网站推广、域名与空间、虚拟空间、企业邮箱。业务覆盖博罗地区。
【阅读全文】
演示示例使用QQ邮箱发送邮件,先获取自己的QQ邮箱的授权码。因为后面发送邮件时需要使用自己的授权码作为邮箱的密码登录邮箱最后达到发送邮件的目的。
将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 = '@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('请输入收件人,示例:@qq.com;0@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 学习网站,抓紧收藏吧!