pyqt5 界面 邮件发送
时间: 2023-05-16 21:03:23 浏览: 193
使用PyQt5可以轻松地创建邮件发送界面。首先,需要使用smtplib和email包来发送邮件。使用smtplib来连接到SMTP服务器并发送邮件,使用email包来构建邮件内容。
在PyQt5中,可以使用QLineEdit、QTextEdit和QComboBox等小部件创建邮件内容输入框,使用QMessageBox和QStatusBar等小部件显示状态信息。然后,可以将这些小部件放在一个QWidget或QDialog中,使用布局管理器将它们定位在正确的位置上。
下面是一个简单的PyQt5邮件发送界面的代码示例,其中包含了所有必要的小部件和代码:
```python
import sys
from PyQt5 import QtGui, QtWidgets
from PyQt5.QtWidgets import QApplication, QWidget, QPushButton, QGridLayout, QLabel, QLineEdit, QTextEdit, QComboBox, QMessageBox, QStatusBar
import smtplib
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
from email.mime.application import MIMEApplication
class EmailSender(QWidget):
def __init__(self):
super().__init__()
self.initUI()
def initUI(self):
# 创建所有的小部件
self.sender_label = QLabel('发件人:')
self.sender_edit = QLineEdit()
self.password_label = QLabel('密码:')
self.password_edit = QLineEdit()
self.password_edit.setEchoMode(QLineEdit.Password) # 隐藏密码
self.recipient_label = QLabel('收件人:')
self.recipient_edit = QLineEdit()
self.subject_label = QLabel('主题:')
self.subject_edit = QLineEdit()
self.body_label = QLabel('正文:')
self.body_edit = QTextEdit()
self.attachment_label = QLabel('附件:')
self.attachment_edit = QLineEdit()
self.attachment_button = QPushButton('浏览')
self.attachment_button.clicked.connect(self.browseFile)
self.attachment_button.setFixedWidth(80)
self.attachment_button.setEnabled(False)
self.send_button = QPushButton('发送')
self.send_button.clicked.connect(self.sendEmail)
self.statusbar = QStatusBar()
self.statusbar.showMessage('准备就绪')
# 创建布局管理器
grid = QGridLayout()
grid.setSpacing(10)
grid.addWidget(self.sender_label, 1, 0)
grid.addWidget(self.sender_edit, 1, 1)
grid.addWidget(self.password_label, 2, 0)
grid.addWidget(self.password_edit, 2, 1)
grid.addWidget(self.recipient_label, 3, 0)
grid.addWidget(self.recipient_edit, 3, 1)
grid.addWidget(self.subject_label, 4, 0)
grid.addWidget(self.subject_edit, 4, 1)
grid.addWidget(self.body_label, 5, 0)
grid.addWidget(self.body_edit, 5, 1)
grid.addWidget(self.attachment_label, 6, 0)
grid.addWidget(self.attachment_edit, 6, 1)
grid.addWidget(self.attachment_button, 6, 2)
grid.addWidget(self.send_button, 7, 0, 1, 3)
# 设置QWidget的布局管理器
self.setLayout(grid)
self.setWindowTitle('邮件发送')
self.setGeometry(300, 300, 400, 300)
self.show()
def browseFile(self):
# 弹出文件对话框
filename = QtWidgets.QFileDialog.getOpenFileName(self, '选择文件')[0]
if filename:
self.attachment_edit.setText(filename)
def sendEmail(self):
# 获取输入的值
sender = self.sender_edit.text()
password = self.password_edit.text()
recipient = self.recipient_edit.text()
subject = self.subject_edit.text()
body = self.body_edit.toPlainText()
attachment = self.attachment_edit.text()
# 创建邮件对象并设置内容
msg = MIMEMultipart()
msg['From'] = sender
msg['To'] = recipient
msg['Subject'] = subject
msg.attach(MIMEText(body, 'plain'))
# 添加附件
if attachment:
with open(attachment, "rb") as f:
attachment_data = f.read()
part = MIMEApplication(attachment_data, Name=attachment.split('/')[-1])
part['Content-Disposition'] = 'attachment; filename="%s"' % attachment.split('/')[-1]
msg.attach(part)
# 连接到SMTP服务器并发送邮件
try:
smtpObj = smtplib.SMTP('smtp.gmail.com', 587) # 连接到SMTP服务器
smtpObj.starttls()
smtpObj.login(sender, password) # 登录到SMTP服务器
smtpObj.sendmail(sender, recipient, msg.as_string()) # 发送邮件
self.statusbar.showMessage('邮件发送成功')
except smtplib.SMTPException as e:
self.statusbar.showMessage('邮件发送失败')
if __name__ == '__main__':
app = QApplication(sys.argv)
es = EmailSender()
sys.exit(app.exec_())
```
在这个例子中,我们使用小部件构建了一个简单的邮件发送界面。首先,用户需要输入发件人和密码,以及收件人、主题、正文和附件等邮件内容。然后,用户可以单击“发送”按钮来发送邮件。
在发送邮件时,我们从输入框中获取用户输入的值,并使用email包来构建邮件内容。我们可以使用MIMEText类将正文添加到邮件中,并使用MIMEMultipart类将附件添加到邮件中。最后,我们使用smtplib包连接到SMTP服务器并发送邮件。
这个例子仅仅只是一个简单的示例,你可以根据自己的需求进行修改和扩展。通过PyQt5,你可以很容易地创建一个美观且功能强大的邮件发送界面。
阅读全文