基于PyQt5制作一個(gè)群發(fā)郵件工具
演示示例使用QQ郵箱發(fā)送郵件,先獲取自己的QQ郵箱的授權(quán)碼。因?yàn)楹竺姘l(fā)送郵件時(shí)需要使用自己的授權(quán)碼作為郵箱的密碼登錄郵箱最后達(dá)到發(fā)送郵件的目的。
將UI處理的相關(guān)的界面包導(dǎo)入進(jìn)來
from PyQt5.QtWidgets import * from PyQt5.QtCore import * from PyQt5.QtGui import * # 應(yīng)用操作相關(guān)的庫 import sys # 郵件發(fā)送相關(guān)的庫 import smtplib from email.mime.text import MIMEText
為了不和郵件發(fā)送的UI界面主線程產(chǎn)生沖突,使用QThread子線程的方式制作郵件發(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'] = '一匹來自北方的狼' # 設(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)
下面是主頁面的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 集中營]') 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('請輸入主題') 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): ''' 槽函數(shù):向文本瀏覽器中寫入內(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()
最后,通過main函數(shù)將頁面布局加入主體循環(huán)即可。
if __name__ == '__main__': app = QApplication(sys.argv) main = StmpEmail() main.show() sys.exit(app.exec_())
以上就是郵件發(fā)送的主要代碼塊了,copy到自己的開發(fā)工具中運(yùn)行即可(前提是你已經(jīng)安裝好了需要的python模塊)。
最終效果圖
到此這篇關(guān)于基于PyQt5制作一個(gè)群發(fā)郵件工具的文章就介紹到這了,更多相關(guān)PyQt5群發(fā)郵件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
python聚類算法解決方案(rest接口/mpp數(shù)據(jù)庫/json數(shù)據(jù)/下載圖片及數(shù)據(jù))
這篇文章主要介紹了python聚類算法解決方案(rest接口/mpp數(shù)據(jù)庫/json數(shù)據(jù)/下載圖片及數(shù)據(jù)),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-08-08Python實(shí)現(xiàn)高分辨率圖像導(dǎo)航的代碼
高分辨率圖像導(dǎo)航是一種技術(shù),它允許用戶在大型圖像中進(jìn)行導(dǎo)航和瀏覽,而無需加載整個(gè)圖像到內(nèi)存中,在本文中,我們將使用30行Python代碼實(shí)現(xiàn)這一功能,我們將使用Python的圖像處理庫和計(jì)算機(jī)視覺庫來加載圖像數(shù)據(jù)并生成高分辨率圖像導(dǎo)航2024-03-03教你利用python實(shí)現(xiàn)企業(yè)微信發(fā)送消息
今天帶大家來練習(xí)python實(shí)戰(zhàn),文中對(duì)利用python實(shí)現(xiàn)企業(yè)微信發(fā)送消息作了詳細(xì)的圖文解說及代碼示例,對(duì)正在學(xué)習(xí)python的小伙伴很有幫助,需要的朋友可以參考下2021-05-05DataFrame窗口函數(shù)rolling()的用法
這篇文章主要介紹了DataFrame窗口函數(shù)rolling()的用法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-02-02