最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

基于PyQt5制作一個(gè)群發(fā)郵件工具

 更新時(shí)間:2022年04月08日 08:09:39   作者:Python 集中營(yíng)  
這篇文章主要介紹了如何利用Python中的PyQt5模塊,制作一個(gè)簡(jiǎn)易的郵件群發(fā)小工具,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以了解一下

演示示例使用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)的庫(kù)
import sys

# 郵件發(fā)送相關(guān)的庫(kù)
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)

下面是主頁(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ù):向文本瀏覽器中寫入內(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ù)將頁(yè)面布局加入主體循環(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)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 使用grappelli為django admin后臺(tái)添加模板

    使用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)模糊匹配

    今天小編就為大家分享一篇python 已知一個(gè)字符,在一個(gè)list中找出近似值或相似值實(shí)現(xiàn)模糊匹配,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧
    2020-02-02
  • pytest中文文檔之編寫斷言

    pytest中文文檔之編寫斷言

    這篇文章主要給大家介紹了關(guān)于pytest中文文檔之編寫斷言的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家學(xué)習(xí)或者使用pytest具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-09-09
  • Python中實(shí)現(xiàn)的RC4算法

    Python中實(shí)現(xiàn)的RC4算法

    這篇文章主要介紹了Python中實(shí)現(xiàn)的RC4算法,本文給出了類和函數(shù)兩種實(shí)現(xiàn)方式,需要的朋友可以參考下
    2015-02-02
  • Python優(yōu)秀開源項(xiàng)目Rich源碼解析的流程分析

    Python優(yōu)秀開源項(xiàng)目Rich源碼解析的流程分析

    這篇文章主要介紹了Python優(yōu)秀開源項(xiàng)目Rich源碼解析,本文通過實(shí)例圖文相結(jié)合給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-07-07
  • Python @property使用方法解析

    Python @property使用方法解析

    這篇文章主要介紹了Python @property使用方法解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2019-09-09
  • Python實(shí)現(xiàn)隨機(jī)劃分圖片數(shù)據(jù)集的示例代碼

    Python實(shí)現(xiàn)隨機(jī)劃分圖片數(shù)據(jù)集的示例代碼

    這篇文章主要為大家詳細(xì)介紹了如何通過Python實(shí)現(xiàn)隨機(jī)將圖片與標(biāo)注文件劃分為訓(xùn)練集和測(cè)試集,文中的示例代碼簡(jiǎn)潔易懂,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2023-05-05
  • numpy中軸處理的實(shí)現(xiàn)

    numpy中軸處理的實(shí)現(xiàn)

    本文主要介紹了numpy中軸處理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2023-03-03
  • python利用百度AI實(shí)現(xiàn)文字識(shí)別功能

    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提速的方法詳解

    這篇文章主要介紹了使用Flask-Cache緩存實(shí)現(xiàn)給Flask提速的方法,結(jié)合實(shí)例形式詳細(xì)分析了Flask-Cache的安裝、配置及緩存使用相關(guān)操作技巧,需要的朋友可以參考下
    2019-06-06

最新評(píng)論

德庆县| 墨江| 肇东市| 田东县| 闽清县| 镶黄旗| 尼玛县| 江城| 乐安县| 建瓯市| 苏尼特右旗| 凌源市| 茌平县| 自治县| 兴海县| 会理县| 古田县| 盐亭县| 荆州市| 青阳县| 丽水市| 曲沃县| 巴林左旗| 宜兴市| 板桥市| 洞口县| 抚顺县| 于田县| 蕉岭县| 阿克苏市| 通榆县| 凉山| 惠州市| 桦甸市| 抚顺市| 旺苍县| 忻州市| 乳山市| 阿坝| 张北县| 颍上县|