網站首頁 編程語言 正文
演示示例使用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模塊)。
最終效果圖
原文鏈接:https://www.cnblogs.com/lwsbc/p/16113978.html
相關推薦
- 2022-07-12 CSS樣式:less語言的用法
- 2022-04-08 pytorch?plt.savefig()的用法及保存路徑_python
- 2022-07-22 URLClassLoader加載Class時的類初始化問題
- 2022-07-18 Linux如何設置SSH免密登錄
- 2022-05-13 this.$route.params獲取不到
- 2022-10-12 使用Docker搭建Vsftpd?的?FTP?服務的詳細過程_docker
- 2022-04-09 SpringBoot設置CorsFilter過濾器解決跨域問題
- 2022-06-14 一文帶你搞懂Numpy中的深拷貝和淺拷貝_python
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支