基于PyQt5制作一個(gè)群發(fā)郵件工具
演示示例使用QQ郵箱發(fā)送郵件,先獲取自己的QQ郵箱的授權(quán)碼。因?yàn)楹竺姘l(fā)送郵件時(shí)需要使用自己的授權(quán)碼作為郵箱的密碼登錄郵箱最后達(dá)到發(fā)送郵件的目的。


將UI處理的相關(guān)的界面包導(dǎo)入進(jìn)來(lái)
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * # 應(yīng)用操作相關(guān)的庫(kù) import sys # 郵件發(fā)送相關(guān)的庫(kù) import smtplib from email.mime.text import MIMEText
為了不和郵件發(fā)送的UI界面主線(xiàn)程產(chǎn)生沖突,使用QThread子線(xiàn)程的方式制作郵件發(fā)送。
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("郵件信息讀取完成!")
# 發(fā)件人郵箱
send_email_name = '1342929047@qq.com'
# 發(fā)件人授權(quán)碼
passwd = 'fjyjqlzxprzihcii'
self.trigger.emit(send_email_name)
self.trigger.emit("發(fā)件人信息初始化完成!")
# 收件人郵箱
msg_to = recipient_text.split(';')
self.trigger.emit(recipient_text)
self.trigger.emit("收件人信息初始化完成!")
print(msg_to)
# 設(shè)置郵件
msg = MIMEText(current_text)
msg['subject'] = email_subject_text
# 設(shè)置發(fā)件人
msg['From'] = '一匹來(lái)自北方的狼'
# 設(shè)置收件人
msg['To'] = ';'.join(msg_to)
# 連接服務(wù)器
smtp = smtplib.SMTP_SSL('smtp.qq.com', 465)
self.trigger.emit("服務(wù)器連接成功!")
# 登錄郵箱
smtp.login(send_email_name, passwd)
self.trigger.emit("郵箱登錄成功!")
# 發(fā)送郵件
smtp.sendmail(send_email_name, msg_to, msg.as_string())
self.trigger.emit("郵件發(fā)送成功!")
self.finished.emit(True)
下面是主頁(yè)面的UI布局及信號(hào)量的代碼塊。
class StmpEmail(QWidget):
def __init__(self):
super(StmpEmail, self).__init__()
self.init_ui()
def init_ui(self):
self.setWindowTitle('批量郵件工具 公眾號(hào):[Python 集中營(yíng)]')
self.setWindowIcon(QIcon('郵件.ico'))
self.setFixedSize(500, 400)
hbox = QHBoxLayout()
self.send_btn = QPushButton()
self.send_btn.setText('發(fā)送')
self.send_btn.clicked.connect(self.send_btn_click)
self.brower = QTextBrowser()
self.brower.setFont(QFont('宋體', 8))
self.brower.setReadOnly(True)
self.brower.setPlaceholderText('執(zhí)行進(jìn)度顯示區(qū)域...')
self.brower.ensureCursorVisible()
hbox.addWidget(self.send_btn)
self.email_subject_text = QLineEdit()
self.email_subject_text.setPlaceholderText('請(qǐng)輸入主題')
self.recipient_text = QLineEdit()
self.recipient_text.setPlaceholderText('請(qǐng)輸入收件人,示例:134047@qq.com;092837@163.com')
self.current_text = QTextEdit()
self.current_text.setPlaceholderText('請(qǐng)輸入郵件正文')
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):
'''
槽函數(shù):向文本瀏覽器中寫(xiě)入內(nèi)容
: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()
最后,通過(guò)main函數(shù)將頁(yè)面布局加入主體循環(huán)即可。
if __name__ == '__main__':
app = QApplication(sys.argv)
main = StmpEmail()
main.show()
sys.exit(app.exec_())
以上就是郵件發(fā)送的主要代碼塊了,copy到自己的開(kāi)發(fā)工具中運(yùn)行即可(前提是你已經(jīng)安裝好了需要的python模塊)。
最終效果圖

到此這篇關(guān)于基于PyQt5制作一個(gè)群發(fā)郵件工具的文章就介紹到這了,更多相關(guān)PyQt5群發(fā)郵件內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
使用grappelli為django admin后臺(tái)添加模板
本文介紹了一款非常流行的Django模板系統(tǒng)--grappelli,以及如何給Django的admin后臺(tái)添加模板,非常的實(shí)用,這里推薦給大家。2014-11-11
python 已知一個(gè)字符,在一個(gè)list中找出近似值或相似值實(shí)現(xiàn)模糊匹配
今天小編就為大家分享一篇python 已知一個(gè)字符,在一個(gè)list中找出近似值或相似值實(shí)現(xiàn)模糊匹配,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02
Python優(yōu)秀開(kāi)源項(xiàng)目Rich源碼解析的流程分析
這篇文章主要介紹了Python優(yōu)秀開(kāi)源項(xiàng)目Rich源碼解析,本文通過(guò)實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-07-07
Python實(shí)現(xiàn)隨機(jī)劃分圖片數(shù)據(jù)集的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何通過(guò)Python實(shí)現(xiàn)隨機(jī)將圖片與標(biāo)注文件劃分為訓(xùn)練集和測(cè)試集,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-05-05
python利用百度AI實(shí)現(xiàn)文字識(shí)別功能
這篇文章主要為大家詳細(xì)介紹了python利用百度AI實(shí)現(xiàn)文字識(shí)別,主要涉及通用文字識(shí)別、網(wǎng)絡(luò)圖片文字識(shí)別、身份證識(shí)別等文字識(shí)別功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11
使用Flask-Cache緩存實(shí)現(xiàn)給Flask提速的方法詳解
這篇文章主要介紹了使用Flask-Cache緩存實(shí)現(xiàn)給Flask提速的方法,結(jié)合實(shí)例形式詳細(xì)分析了Flask-Cache的安裝、配置及緩存使用相關(guān)操作技巧,需要的朋友可以參考下2019-06-06

