首頁 > 軟體

基於PyQt5製作一個群發郵件工具

2022-04-08 13:01:24

演示範例使用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 = '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模組)。

最終效果圖

到此這篇關於基於PyQt5製作一個群發郵件工具的文章就介紹到這了,更多相關PyQt5群發郵件內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com