背景 在項目使用了Spring Security之後,很多介面無法訪問了,從瀏覽器的網路調試窗看到的是CORS的報錯和403的報錯 分析 我們先來看一下CORS是什麼,和它很相似的CSRF是什麼,在SpringSecurity中如何配置以及起的什麼作用 CORS(Cross Origin Resou ...
【閱讀全文】
演示示例使用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 = '[email protected]'
# 發件人授權碼
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('請輸入收件人,示例:[email protected];[email protected]')
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模塊)。
有需要下載完整源代碼請在公眾號內回覆'批量郵件工具'即可獲取下載鏈接。
【往期精選】
python 一行命令開啟網路間的文件共用...
PyQt5 批量刪除 Excel 重覆數據,多個文件、自定義重覆項一鍵刪除...
再見XShell,這款國人開源的終端命令行工具更nice!
python 表情包下載器,輕鬆下載上萬個表情包、鬥圖不用愁...
Python 自動清理電腦垃圾文件,一鍵啟動即可...
有了jmespath,處理python中的json數據就變成了一種享受...
解鎖一個新技能,如何在Python代碼中使用表情包...
萬能的list列表,python中的堆棧、隊列實現全靠它!
該怎麼用pyqt5來實現數據的增、刪、改、查功能...
介紹一個文本語音神器,幾行代碼就能搞定!
python批量自動整理文件
初學者福利:分享五個免費的 Python 學習網站,抓緊收藏吧!
歡迎關註作者公眾號【Python 集中營】,專註於後端編程,每天更新技術乾貨,不定時分享各類資料!