網(wǎng)站首頁 編程語言 正文
演示示例使用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('請(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ù)將頁面布局加入主體循環(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模塊)。
最終效果圖
原文鏈接:https://www.cnblogs.com/lwsbc/p/16113978.html
相關(guān)推薦
- 2024-02-27 Action獲取表單提交數(shù)據(jù)
- 2022-10-05 C#?獲取文件夾里所有文件名的詳細(xì)代碼_C#教程
- 2022-07-21 StreamX 部署 Flink Stream 應(yīng)用
- 2022-04-11 .NET應(yīng)用程序集DLL與EXE工作機(jī)制及原理介紹_自學(xué)過程
- 2022-08-13 Redis - 數(shù)據(jù)結(jié)構(gòu)和持久化機(jī)制
- 2022-12-13 使用Idea調(diào)試RocketMQ源碼教程_服務(wù)器其它
- 2022-10-02 C語言數(shù)組越界引發(fā)的死循環(huán)問題解決_C 語言
- 2022-05-25 Python小游戲?qū)崿F(xiàn)實(shí)例之接蘋果_python
- 最近更新
-
- window11 系統(tǒng)安裝 yarn
- 超詳細(xì)win安裝深度學(xué)習(xí)環(huán)境2025年最新版(
- Linux 中運(yùn)行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲(chǔ)小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎(chǔ)操作-- 運(yùn)算符,流程控制 Flo
- 1. Int 和Integer 的區(qū)別,Jav
- spring @retryable不生效的一種
- Spring Security之認(rèn)證信息的處理
- Spring Security之認(rèn)證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權(quán)
- redisson分布式鎖中waittime的設(shè)
- maven:解決release錯(cuò)誤:Artif
- restTemplate使用總結(jié)
- Spring Security之安全異常處理
- MybatisPlus優(yōu)雅實(shí)現(xiàn)加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務(wù)發(fā)現(xiàn)-Nac
- Spring Security之基于HttpR
- Redis 底層數(shù)據(jù)結(jié)構(gòu)-簡單動(dòng)態(tài)字符串(SD
- arthas操作spring被代理目標(biāo)對(duì)象命令
- Spring中的單例模式應(yīng)用詳解
- 聊聊消息隊(duì)列,發(fā)送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠(yuǎn)程分支