pyqt5實現SMTP郵件發送

# -*- coding: utf-8 -*-

# Form implementation generated from reading ui file 'SMTP.ui'
#
# Created by: PyQt5 UI code generator 5.10.1
#
# WARNING! All changes made in this file will be lost!


import sys
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QMainWindow,QFileDialog

import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.utils import formataddr


class Ui_MainWindow(QtWidgets.QMainWindow):
    def __init__(self):
        super(Ui_MainWindow,self).__init__()
        self.setupUi(self)
        self.retranslateUi(self)

    def setupUi(self, MainWindow):
        MainWindow.setObjectName("MainWindow")
        MainWindow.resize(1095, 842)
        self.centralwidget = QtWidgets.QWidget(MainWindow)
        self.centralwidget.setObjectName("centralwidget")
        self.label_title = QtWidgets.QLabel(self.centralwidget)
        self.label_title.setGeometry(QtCore.QRect(310, 300, 81, 18))
        self.label_title.setObjectName("label_title")
        self.textEdit_title = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit_title.setGeometry(QtCore.QRect(410, 290, 351, 41))
        self.textEdit_title.setObjectName("textEdit_title")
        self.label_passage = QtWidgets.QLabel(self.centralwidget)
        self.label_passage.setGeometry(QtCore.QRect(60, 350, 81, 18))
        self.label_passage.setObjectName("label_passage")
        self.textEdit_passage = QtWidgets.QTextEdit(self.centralwidget)
        self.textEdit_passage.setGeometry(QtCore.QRect(60, 380, 971, 361))
        self.textEdit_passage.setObjectName("textEdit_passage")
        self.button_send = QtWidgets.QPushButton(self.centralwidget)
        self.button_send.setGeometry(QtCore.QRect(510, 750, 112, 34))
        self.button_send.setObjectName("button_send")
        self.button_send.clicked.connect(self.send_email)
        self.gridLayoutWidget = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget.setGeometry(QtCore.QRect(60, 40, 271, 81))
        self.gridLayoutWidget.setObjectName("gridLayoutWidget")
        self.gridLayout = QtWidgets.QGridLayout(self.gridLayoutWidget)
        self.gridLayout.setContentsMargins(0, 0, 0, 0)
        self.gridLayout.setObjectName("gridLayout")
        self.textEdit_smtpserver = QtWidgets.QTextEdit(self.gridLayoutWidget)
        self.textEdit_smtpserver.setObjectName("textEdit_smtpserver")
        self.gridLayout.addWidget(self.textEdit_smtpserver, 0, 2, 1, 1)
        self.textEdit_port = QtWidgets.QTextEdit(self.gridLayoutWidget)
        self.textEdit_port.setObjectName("textEdit_port")
        self.gridLayout.addWidget(self.textEdit_port, 1, 2, 1, 1)
        self.label_port = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_port.setObjectName("label_port")
        self.gridLayout.addWidget(self.label_port, 1, 0, 1, 1)
        self.label_smtpserver = QtWidgets.QLabel(self.gridLayoutWidget)
        self.label_smtpserver.setObjectName("label_smtpserver")
        self.gridLayout.addWidget(self.label_smtpserver, 0, 0, 1, 1)
        self.gridLayoutWidget_2 = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget_2.setGeometry(QtCore.QRect(60, 150, 531, 121))
        self.gridLayoutWidget_2.setObjectName("gridLayoutWidget_2")
        self.gridLayout_2 = QtWidgets.QGridLayout(self.gridLayoutWidget_2)
        self.gridLayout_2.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_2.setObjectName("gridLayout_2")
        self.label_receivernickname = QtWidgets.QLabel(self.gridLayoutWidget_2)
        self.label_receivernickname.setObjectName("label_receivernickname")
        self.gridLayout_2.addWidget(self.label_receivernickname, 2, 0, 1, 1)
        self.label_sender = QtWidgets.QLabel(self.gridLayoutWidget_2)
        self.label_sender.setObjectName("label_sender")
        self.gridLayout_2.addWidget(self.label_sender, 0, 0, 1, 1)
        self.label_receiver = QtWidgets.QLabel(self.gridLayoutWidget_2)
        self.label_receiver.setObjectName("label_receiver")
        self.gridLayout_2.addWidget(self.label_receiver, 1, 0, 1, 1)
        self.textEdit_receiver = QtWidgets.QTextEdit(self.gridLayoutWidget_2)
        self.textEdit_receiver.setObjectName("textEdit_receiver")
        self.gridLayout_2.addWidget(self.textEdit_receiver, 1, 2, 1, 1)
        self.textEdit_sender = QtWidgets.QTextEdit(self.gridLayoutWidget_2)
        self.textEdit_sender.setObjectName("textEdit_sender")
        self.gridLayout_2.addWidget(self.textEdit_sender, 0, 2, 1, 1)
        self.textEdit_receivernickname = QtWidgets.QTextEdit(self.gridLayoutWidget_2)
        self.textEdit_receivernickname.setObjectName("textEdit_receivernickname")
        self.gridLayout_2.addWidget(self.textEdit_receivernickname, 2, 2, 1, 1)
        self.gridLayoutWidget_3 = QtWidgets.QWidget(self.centralwidget)
        self.gridLayoutWidget_3.setGeometry(QtCore.QRect(500, 40, 531, 81))
        self.gridLayoutWidget_3.setObjectName("gridLayoutWidget_3")
        self.gridLayout_3 = QtWidgets.QGridLayout(self.gridLayoutWidget_3)
        self.gridLayout_3.setContentsMargins(0, 0, 0, 0)
        self.gridLayout_3.setObjectName("gridLayout_3")
        self.smtp_username = QtWidgets.QLabel(self.gridLayoutWidget_3)
        self.smtp_username.setObjectName("smtp_username")
        self.gridLayout_3.addWidget(self.smtp_username, 0, 0, 1, 1)
        self.textEdit_username = QtWidgets.QTextEdit(self.gridLayoutWidget_3)
        self.textEdit_username.setObjectName("textEdit_username")
        self.gridLayout_3.addWidget(self.textEdit_username, 0, 1, 1, 1)
        self.textEdit_pwd = QtWidgets.QTextEdit(self.gridLayoutWidget_3)
        self.textEdit_pwd.setObjectName("textEdit_pwd")
        self.gridLayout_3.addWidget(self.textEdit_pwd, 1, 1, 1, 1)
        self.label_pwd = QtWidgets.QLabel(self.gridLayoutWidget_3)
        self.label_pwd.setObjectName("label_pwd")
        self.gridLayout_3.addWidget(self.label_pwd, 1, 0, 1, 1)
        self.button_upload = QtWidgets.QPushButton(self.centralwidget)
        self.button_upload.setGeometry(QtCore.QRect(640, 180, 51, 61))
        self.button_upload.setObjectName("button_upload")
        self.button_upload.clicked.connect(self.upload_file)

        # self.listView = QtWidgets.QListView(self.centralwidget)
        # self.listView.setGeometry(QtCore.QRect(700, 168, 331, 101))
        # self.listView.setObjectName("listView")
        self.file_list = QtWidgets.QTextEdit(self.centralwidget)
        self.file_list.setEnabled(False)
        self.file_list.setGeometry(QtCore.QRect(700, 180, 331, 101))
        self.file_list.setObjectName("file_list")

        self.checkBox_SSL = QtWidgets.QCheckBox(self.centralwidget)
        self.checkBox_SSL.setGeometry(QtCore.QRect(360, 70, 105, 22))
        self.checkBox_SSL.setObjectName("checkBox_SSL")

        self.label_list = QtWidgets.QLabel(self.centralwidget)
        self.label_list.setGeometry(QtCore.QRect(700, 150, 81, 18))
        self.label_list.setObjectName("label_list")
        MainWindow.setCentralWidget(self.centralwidget)
        self.menubar = QtWidgets.QMenuBar(MainWindow)
        self.menubar.setGeometry(QtCore.QRect(0, 0, 1095, 30))
        self.menubar.setObjectName("menubar")
        MainWindow.setMenuBar(self.menubar)
        self.statusbar = QtWidgets.QStatusBar(MainWindow)
        self.statusbar.setObjectName("statusbar")
        MainWindow.setStatusBar(self.statusbar)

        self.retranslateUi(MainWindow)
        QtCore.QMetaObject.connectSlotsByName(MainWindow)

    def retranslateUi(self, MainWindow):
        _translate = QtCore.QCoreApplication.translate
        MainWindow.setWindowTitle(_translate("MainWindow", "SMTP郵件發送"))
        self.label_title.setText(_translate("MainWindow", "標題"))
        self.label_passage.setText(_translate("MainWindow", "正文"))
        self.button_send.setText(_translate("MainWindow", "發送"))
        self.label_port.setText(_translate("MainWindow", "端口號"))
        self.label_smtpserver.setText(_translate("MainWindow", "smtp服務器"))
        self.label_sender.setText(_translate("MainWindow", "發件人"))
        self.label_receiver.setText(_translate("MainWindow", "收件人"))
        self.smtp_username.setText(_translate("MainWindow", "用戶名"))
        self.label_pwd.setText(_translate("MainWindow", "受權碼/密碼"))
        self.button_upload.setText(_translate("MainWindow", "上傳\n"
                                                           "文件"))
        self.label_list.setText(_translate("MainWindow", "附件列表"))
        self.label_receivernickname.setText(_translate("MainWindow", "收件人暱稱"))
        self.checkBox_SSL.setText(_translate("MainWindow", "使用SSL"))

    message = MIMEMultipart()
    def send_email(self):
        my_sender = self.textEdit_username.toPlainText()  # 發件人郵箱帳號
        my_pass = self.textEdit_pwd.toPlainText()  # 發件人郵箱密碼
        my_user = self.textEdit_receiver.toPlainText()  # 收件人郵箱帳號,我這邊發送給本身
        sender_kickname = self.textEdit_sender.toPlainText()  # 發件人郵箱
        title = self.textEdit_title.toPlainText()
        passage = self.textEdit_passage.toPlainText()
        SMTP_server = self.textEdit_smtpserver.toPlainText()
        port = self.textEdit_port.toPlainText()
        ret = True
        try:

            self.message['From'] = formataddr([sender_kickname, my_sender])  # 括號裏的對應發件人郵箱暱稱、發件人郵箱帳號
            self.message['To'] = formataddr([self.textEdit_receivernickname.toPlainText(), my_user])  # 括號裏的對應收件人郵箱暱稱、收件人郵箱帳號
            self.message['Subject'] = title  # 郵件的主題,也能夠說是標題

            self.message.attach(MIMEText(passage, 'plain', 'utf-8'))
            if(self.checkBox_SSL.checkState()==0):
                server = smtplib.SMTP(SMTP_server, port)
            else:
                server = smtplib.SMTP_SSL(SMTP_server, port)  # 發件人郵箱中的SMTP服務器,端口是25
            server.login(my_sender, my_pass)  # 括號中對應的是發件人郵箱帳號、郵箱密碼
            server.sendmail(my_sender, [my_user, ], self.message.as_string())  # 括號中對應的是發件人郵箱帳號、收件人郵箱帳號、發送郵件
            server.quit()  # 關閉鏈接
        except Exception:  # 若是 try 中的語句沒有執行,則會執行下面的 ret=False
            ret = False
        if ret:
            print("郵件發送成功")
            self.message = MIMEMultipart() #清空郵件內容
        else:
            print("郵件發送失敗")

    def upload_file(self):
        openfile_name = QFileDialog.getOpenFileName(self, '選擇文件', '', 'All Types(*.*)')
        if(('', '')!=openfile_name):
            import os
            attach_file = MIMEText(open(openfile_name[0], 'rb').read(), 'base64', 'utf-8')
            attach_file["Content-Type"] = 'application/octet-stream'
            # 這裏的filename能夠任意寫,寫什麼名字,郵件中顯示什麼名字
            filename=os.path.basename(openfile_name[0])
            attach_file["Content-Disposition"] = 'attachment; filename=\"'+filename+'\"'
            self.message.attach(attach_file)
            # self.listView.addAction(filename)
            files=self.file_list.toPlainText()
            self.file_list.setText(files+"\n"+filename)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    MainWindow = QMainWindow()
    ui = Ui_MainWindow()
    ui.setupUi(MainWindow)
    MainWindow.show()
    sys.exit(app.exec_())

  或者在https://paste.ubuntu.com/p/JrJmpktw2s/看也是同樣的python

相關文章
相關標籤/搜索