当前位置: 首页 > news >正文

社交网站开发流程天津建设与管理局网站

社交网站开发流程,天津建设与管理局网站,中国十大旅游网站,曲阜市建设局网站PyQt5 邮件客户端 下面是一个简洁高效的邮件客户端实现#xff0c;支持编写邮件、添加附件和发送邮件功能#xff1a; 编写 eMailClient_qt.py 如下 # -*- coding: utf-8 -*-用 PyQt5 开发一个邮件客户端#xff0c;能编写邮件#xff0c;发送邮件及…PyQt5 邮件客户端 下面是一个简洁高效的邮件客户端实现支持编写邮件、添加附件和发送邮件功能 编写 eMailClient_qt.py 如下 # -*- coding: utf-8 -*-用 PyQt5 开发一个邮件客户端能编写邮件发送邮件及附件 import os import sys import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout, QFileDialog,QLineEdit, QTextEdit, QPushButton, QLabel,QListWidget, QMessageBox, QStatusBar, QGridLayout) from PyQt5.QtGui import QFont, QPalette, QColor from PyQt5.QtCore import Qt, QSizeclass EmailClient(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle(邮件客户端)# 设置窗口大小为1000x600self.setGeometry(100, 100, 1000, 600)# 设置现代化UI样式self.setStyleSheet(QMainWindow {background-color: #f0f2f5;}QLabel {color: #333;font-size: 12px;font-weight: bold;padding: 2px 0;}QLineEdit, QTextEdit {background-color: white;border: 1px solid #dcdfe6;border-radius: 4px;padding: 8px;font-size: 13px;}QLineEdit:focus, QTextEdit:focus {border: 1px solid #4a90e2;}QPushButton {background-color: #4a90e2;color: white;border: none;border-radius: 4px;padding: 8px 15px;font-size: 13px;min-height: 30px;}QPushButton:hover {background-color: #3a7bc8;}QPushButton:pressed {background-color: #2a65a8;}QPushButton#attachButton {background-color: #f5f7fa;color: #4a90e2;border: 1px solid #4a90e2;}QPushButton#sendButton {background-color: #27ae60;padding: 10px 25px;font-size: 14px;font-weight: bold;}QPushButton#sendButton:hover {background-color: #219653;}QListWidget {background-color: white;border: 1px solid #dcdfe6;border-radius: 4px;padding: 5px;font-size: 12px;alternate-background-color: #f8f9fa;}QStatusBar {background-color: #e0e6ed;color: #666;font-size: 11px;padding: 5px;}QFrame#headerFrame {background-color: #4a90e2;border-radius: 5px;padding: 10px;})# 创建中央部件central_widget QWidget()self.setCentralWidget(central_widget)# 主布局 - 使用网格布局更灵活main_layout QGridLayout(central_widget)main_layout.setSpacing(15)main_layout.setContentsMargins(15, 15, 15, 15)# 标题区域title_label QLabel(邮件客户端)title_label.setFont(QFont(Arial, 18, QFont.Bold))title_label.setStyleSheet(color: #2c3e50;)main_layout.addWidget(title_label, 0, 0, 1, 3, alignmentQt.AlignLeft)# 发件人信息main_layout.addWidget(QLabel(发件人:), 1, 0, alignmentQt.AlignRight)self.sender_email QLineEdit()self.sender_email.setPlaceholderText(your_emailqq.com)main_layout.addWidget(self.sender_email, 1, 1, 1, 2)main_layout.addWidget(QLabel(密码:), 1, 3, alignmentQt.AlignRight)self.password QLineEdit()self.password.setEchoMode(QLineEdit.Password)self.password.setPlaceholderText(邮箱密码或应用密码)main_layout.addWidget(self.password, 1, 4)# 收件人 - 标签和输入框在同一行main_layout.addWidget(QLabel(收件人:), 2, 0, alignmentQt.AlignRight)self.recipient_email QLineEdit()self.recipient_email.setPlaceholderText(recipientqq.com)main_layout.addWidget(self.recipient_email, 2, 1, 1, 4)# 主题 - 标签和输入框在同一行main_layout.addWidget(QLabel(主题:), 3, 0, alignmentQt.AlignRight)self.subject QLineEdit()self.subject.setPlaceholderText(邮件主题)main_layout.addWidget(self.subject, 3, 1, 1, 4)# 附件main_layout.addWidget(QLabel(附件:), 4, 0, alignmentQt.AlignRight | Qt.AlignTop)# 附件列表和按钮attachment_widget QWidget()attachment_layout QVBoxLayout(attachment_widget)self.attachment_list QListWidget()self.attachment_list.setMinimumHeight(80)attachment_layout.addWidget(self.attachment_list)# 按钮布局btn_layout QHBoxLayout()attach_button QPushButton(添加附件)attach_button.setObjectName(attachButton)attach_button.clicked.connect(self.add_attachment)btn_layout.addWidget(attach_button)remove_button QPushButton(移除附件)remove_button.setObjectName(attachButton)remove_button.clicked.connect(self.remove_attachment)btn_layout.addWidget(remove_button)attachment_layout.addLayout(btn_layout)main_layout.addWidget(attachment_widget, 4, 1, 1, 4)# 邮件正文 - 扩大区域main_layout.addWidget(QLabel(正文:), 5, 0, alignmentQt.AlignRight | Qt.AlignTop)self.body QTextEdit()self.body.setPlaceholderText(在此输入邮件内容...)# 设置正文区域的行数相对扩大main_layout.addWidget(self.body, 5, 1, 1, 4)# 发送按钮send_button QPushButton(发送邮件)send_button.setObjectName(sendButton)send_button.clicked.connect(self.send_email)main_layout.addWidget(send_button, 6, 4, alignmentQt.AlignRight)# 设置行和列的比例使正文区域扩大main_layout.setRowStretch(5, 3) # 正文区域行权重设为3main_layout.setColumnStretch(1, 1)main_layout.setColumnStretch(2, 1)main_layout.setColumnStretch(3, 1)main_layout.setColumnStretch(4, 2) # 右侧列权重更大# 状态栏self.status_bar QStatusBar()self.setStatusBar(self.status_bar)self.status_bar.showMessage(f就绪 - 窗口大小: {self.width()}x{self.height()})# 存储附件路径self.attachments []# 设置示例数据self.sender_email.setText(your_emailqq.com)self.recipient_email.setText(recipientqq.com)self.subject.setText(PyQt5 邮件客户端测试)self.body.setPlainText(这是一封测试邮件使用 PyQt5 邮件客户端发送。\n\n此邮件支持添加多个附件并采用现代化的界面设计。\n\n功能包括\n• 邮件编写\n• 附件添加/移除\n• 邮件发送\n• 状态反馈\n\n祝您使用愉快)def add_attachment(self):files, _ QFileDialog.getOpenFileNames(self, 选择附件, , 所有文件 (*.*))if files:self.attachments.extend(files)self.attachment_list.addItems(files)self.status_bar.showMessage(f已添加 {len(files)} 个附件)def remove_attachment(self):current_row self.attachment_list.currentRow()if current_row 0:item self.attachment_list.takeItem(current_row)del self.attachments[current_row]self.status_bar.showMessage(f已移除附件: {item.text()})else:self.status_bar.showMessage(请选择要移除的附件)def send_email(self):sender self.sender_email.text()password self.password.text()recipient self.recipient_email.text()subject self.subject.text()body self.body.toPlainText() # 使用纯文本格式if not sender or not password or not recipient:QMessageBox.warning(self, 输入错误, 请填写完整的发件人、密码和收件人信息)returntry:# 创建邮件对象msg MIMEMultipart()msg[From] sendermsg[To] recipientmsg[Subject] subject# 添加邮件正文msg.attach(MIMEText(body, plain))# 添加附件for file_path in self.attachments:try:with open(file_path, rb) as attachment:part MIMEBase(application, octet-stream)part.set_payload(attachment.read())encoders.encode_base64(part)# 获取文件名filename file_path.split(/)[-1] if / in file_path else file_pathfilename filename.split(\\)[-1] # 处理Windows路径part.add_header(Content-Disposition,fattachment; filename{filename},)msg.attach(part)except Exception as e:self.status_bar.showMessage(f添加附件失败: {str(e)})return# 连接SMTP服务器并发送邮件self.status_bar.showMessage(正在连接服务器...)server smtplib.SMTP_SSL(smtp.gmail.com, 465) # 使用Gmail SMTP服务器self.status_bar.showMessage(正在登录...)server.login(sender, password)self.status_bar.showMessage(正在发送邮件...)server.sendmail(sender, recipient, msg.as_string())server.quit()# 发送成功后的操作self.status_bar.showMessage(邮件发送成功)QMessageBox.information(self, 发送成功, 邮件已成功发送)# 清空附件列表self.attachment_list.clear()self.attachments []except smtplib.SMTPAuthenticationError:QMessageBox.critical(self, 认证失败, 邮箱或密码错误请检查您的登录信息)self.status_bar.showMessage(认证失败)except Exception as e:QMessageBox.critical(self, 发送失败, f邮件发送失败: {str(e)})self.status_bar.showMessage(f发送失败: {str(e)})def resizeEvent(self, event):窗口大小改变时更新状态栏信息self.status_bar.showMessage(f就绪 - 窗口大小: {self.width()}x{self.height()})super().resizeEvent(event)if __name__ __main__:app QApplication(sys.argv)# 设置应用样式palette QPalette()palette.setColor(QPalette.Window, QColor(240, 242, 245))palette.setColor(QPalette.WindowText, QColor(51, 51, 51))palette.setColor(QPalette.Base, QColor(255, 255, 255))palette.setColor(QPalette.AlternateBase, QColor(248, 249, 250))palette.setColor(QPalette.Button, QColor(74, 144, 226))palette.setColor(QPalette.ButtonText, QColor(255, 255, 255))palette.setColor(QPalette.Highlight, QColor(74, 144, 226))palette.setColor(QPalette.HighlightedText, QColor(255, 255, 255))app.setPalette(palette)client EmailClient()client.show()sys.exit(app.exec_())功能说明 这个邮件客户端实现了以下核心功能 邮件编写 发件人邮箱和密码输入收件人地址输入邮件主题输入邮件正文编辑区域 附件管理 添加多个附件查看附件列表移除选中的附件 邮件发送 使用SMTP协议发送邮件支持纯文本格式的邮件内容支持发送多个附件错误处理和状态反馈 使用说明 在发件人字段输入您的邮箱地址在密码字段输入您的邮箱密码或应用专用密码在收件人字段输入收件人邮箱地址填写邮件主题和正文内容点击添加附件按钮选择要发送的文件点击发送邮件按钮发送邮件 注意事项 该程序默认使用Gmail的SMTP服务器smtp.gmail.com:465如果您使用其他邮箱服务 QQ邮箱smtp.qq.com:465163邮箱smtp.163.com:465Outlooksmtp.office365.com:587需要使用TLS 部分邮箱服务需要开启SMTP服务并获取授权码 Gmail需要在账户设置中开启安全性较低的应用的访问权限QQ/163需要在邮箱设置中开启SMTP服务并获取授权码 出于安全考虑程序不会保存您的密码每次发送邮件都需要输入 这个程序提供了一个简洁高效的邮件发送解决方案代码结构清晰去除了不必要的装饰元素专注于核心功能的实现。 PyQt5 邮件客户端 - 优化布局 下面是一个优化布局的邮件客户端实现窗口大小调整为1000x600提供更舒适的编辑体验 编写 eMailClient_qt5.py 如下 import sys import smtplib from email.mime.multipart import MIMEMultipart from email.mime.text import MIMEText from email.mime.base import MIMEBase from email import encoders from PyQt5.QtWidgets import (QApplication, QMainWindow, QWidget, QVBoxLayout, QHBoxLayout,QLineEdit, QTextEdit, QPushButton, QLabel, QFileDialog,QListWidget, QMessageBox, QStatusBar, QSplitter, QFrame) from PyQt5.QtGui import QFont, QPalette, QColor from PyQt5.QtCore import Qtclass EmailClient(QMainWindow):def __init__(self):super().__init__()self.setWindowTitle(邮件客户端)# 设置窗口大小为1000x600self.setGeometry(100, 100, 1000, 600)# 设置现代化UI样式self.setStyleSheet(QMainWindow {background-color: #f0f2f5;}QLabel {color: #333;font-size: 12px;font-weight: bold;padding: 2px 0;}QLineEdit, QTextEdit {background-color: white;border: 1px solid #dcdfe6;border-radius: 4px;padding: 8px;font-size: 13px;}QLineEdit:focus, QTextEdit:focus {border: 1px solid #4a90e2;}QPushButton {background-color: #4a90e2;color: white;border: none;border-radius: 4px;padding: 8px 15px;font-size: 13px;min-height: 30px;}QPushButton:hover {background-color: #3a7bc8;}QPushButton:pressed {background-color: #2a65a8;}QPushButton#attachButton {background-color: #f5f7fa;color: #4a90e2;border: 1px solid #4a90e2;}QPushButton#sendButton {background-color: #27ae60;padding: 10px 25px;font-size: 14px;font-weight: bold;}QPushButton#sendButton:hover {background-color: #219653;}QListWidget {background-color: white;border: 1px solid #dcdfe6;border-radius: 4px;padding: 5px;font-size: 12px;alternate-background-color: #f8f9fa;}QStatusBar {background-color: #e0e6ed;color: #666;font-size: 11px;padding: 5px;}QFrame#headerFrame {background-color: #4a90e2;border-radius: 5px;padding: 10px;})# 创建中央部件central_widget QWidget()self.setCentralWidget(central_widget)# 主布局main_layout QVBoxLayout(central_widget)main_layout.setSpacing(15)main_layout.setContentsMargins(15, 15, 15, 15)# 标题区域header_frame QFrame()header_frame.setObjectName(headerFrame)header_layout QHBoxLayout(header_frame)header_layout.setContentsMargins(10, 5, 10, 5)title_label QLabel(邮件客户端)title_label.setFont(QFont(Arial, 18, QFont.Bold))title_label.setStyleSheet(color: white;)header_layout.addWidget(title_label)header_layout.addStretch()main_layout.addWidget(header_frame)# 创建分割器左侧为设置区域右侧为编辑区域splitter QSplitter(Qt.Horizontal)main_layout.addWidget(splitter, 1)# 左侧设置面板settings_panel QWidget()settings_layout QVBoxLayout(settings_panel)settings_layout.setContentsMargins(0, 0, 10, 0)# 发件人信息sender_group QWidget()sender_layout QVBoxLayout(sender_group)sender_layout.addWidget(QLabel(发件人设置))sender_form QHBoxLayout()sender_form.addWidget(QLabel(邮箱:))self.sender_email QLineEdit()self.sender_email.setPlaceholderText(your_emailexample.com)sender_form.addWidget(self.sender_email)sender_layout.addLayout(sender_form)sender_form2 QHBoxLayout()sender_form2.addWidget(QLabel(密码:))self.password QLineEdit()self.password.setEchoMode(QLineEdit.Password)self.password.setPlaceholderText(邮箱密码或应用密码)sender_form2.addWidget(self.password)sender_layout.addLayout(sender_form2)settings_layout.addWidget(sender_group)# 收件人recipient_group QWidget()recipient_layout QVBoxLayout(recipient_group)recipient_layout.addWidget(QLabel(收件人))self.recipient_email QLineEdit()self.recipient_email.setPlaceholderText(recipientexample.com)recipient_layout.addWidget(self.recipient_email)settings_layout.addWidget(recipient_group)# 主题subject_group QWidget()subject_layout QVBoxLayout(subject_group)subject_layout.addWidget(QLabel(主题))self.subject QLineEdit()self.subject.setPlaceholderText(邮件主题)subject_layout.addWidget(self.subject)settings_layout.addWidget(subject_group)# 附件attachment_group QWidget()attachment_layout QVBoxLayout(attachment_group)attachment_layout.addWidget(QLabel(附件))# 附件列表self.attachment_list QListWidget()self.attachment_list.setMinimumHeight(100)attachment_layout.addWidget(self.attachment_list)# 附件按钮btn_layout QHBoxLayout()attach_button QPushButton(添加附件)attach_button.setObjectName(attachButton)attach_button.clicked.connect(self.add_attachment)btn_layout.addWidget(attach_button)remove_button QPushButton(移除附件)remove_button.setObjectName(attachButton)remove_button.clicked.connect(self.remove_attachment)btn_layout.addWidget(remove_button)attachment_layout.addLayout(btn_layout)settings_layout.addWidget(attachment_group)settings_layout.addStretch()# 右侧编辑区域editor_panel QWidget()editor_layout QVBoxLayout(editor_panel)editor_layout.setContentsMargins(0, 0, 0, 0)# 邮件正文editor_layout.addWidget(QLabel(邮件正文))self.body QTextEdit()self.body.setPlaceholderText(在此输入邮件内容...)editor_layout.addWidget(self.body, 1)# 发送按钮send_button QPushButton(发送邮件)send_button.setObjectName(sendButton)send_button.clicked.connect(self.send_email)editor_layout.addWidget(send_button, 0, Qt.AlignRight)# 添加左右面板到分割器splitter.addWidget(settings_panel)splitter.addWidget(editor_panel)splitter.setSizes([300, 700])# 状态栏self.status_bar QStatusBar()self.setStatusBar(self.status_bar)self.status_bar.showMessage(就绪 - 窗口大小: 1000x600)# 存储附件路径self.attachments []# 设置示例数据self.sender_email.setText(your_emailexample.com)self.recipient_email.setText(recipientexample.com)self.subject.setText(PyQt5 邮件客户端测试)self.body.setPlainText(这是一封测试邮件使用 PyQt5 邮件客户端发送。\n\n此邮件支持添加多个附件并采用现代化的界面设计。\n\n功能包括\n• 邮件编写\n• 附件添加/移除\n• 邮件发送\n• 状态反馈\n\n祝您使用愉快)def add_attachment(self):files, _ QFileDialog.getOpenFileNames(self, 选择附件, , 所有文件 (*.*))if files:self.attachments.extend(files)self.attachment_list.addItems(files)self.status_bar.showMessage(f已添加 {len(files)} 个附件)def remove_attachment(self):current_row self.attachment_list.currentRow()if current_row 0:item self.attachment_list.takeItem(current_row)del self.attachments[current_row]self.status_bar.showMessage(f已移除附件: {item.text()})else:self.status_bar.showMessage(请选择要移除的附件)def send_email(self):sender self.sender_email.text()password self.password.text()recipient self.recipient_email.text()subject self.subject.text()body self.body.toPlainText() # 使用纯文本格式if not sender or not password or not recipient:QMessageBox.warning(self, 输入错误, 请填写完整的发件人、密码和收件人信息)returntry:# 创建邮件对象msg MIMEMultipart()msg[From] sendermsg[To] recipientmsg[Subject] subject# 添加邮件正文msg.attach(MIMEText(body, plain))# 添加附件for file_path in self.attachments:try:with open(file_path, rb) as attachment:part MIMEBase(application, octet-stream)part.set_payload(attachment.read())encoders.encode_base64(part)# 获取文件名filename file_path.split(/)[-1] if / in file_path else file_pathfilename filename.split(\\)[-1] # 处理Windows路径part.add_header(Content-Disposition,fattachment; filename{filename},)msg.attach(part)except Exception as e:self.status_bar.showMessage(f添加附件失败: {str(e)})return# 连接SMTP服务器并发送邮件self.status_bar.showMessage(正在连接服务器...)server smtplib.SMTP_SSL(smtp.gmail.com, 465) # 使用Gmail SMTP服务器self.status_bar.showMessage(正在登录...)server.login(sender, password)self.status_bar.showMessage(正在发送邮件...)server.sendmail(sender, recipient, msg.as_string())server.quit()# 发送成功后的操作self.status_bar.showMessage(邮件发送成功)QMessageBox.information(self, 发送成功, 邮件已成功发送)# 清空附件列表self.attachment_list.clear()self.attachments []except smtplib.SMTPAuthenticationError:QMessageBox.critical(self, 认证失败, 邮箱或密码错误请检查您的登录信息)self.status_bar.showMessage(认证失败)except Exception as e:QMessageBox.critical(self, 发送失败, f邮件发送失败: {str(e)})self.status_bar.showMessage(f发送失败: {str(e)})if __name__ __main__:app QApplication(sys.argv)# 设置应用样式palette QPalette()palette.setColor(QPalette.Window, QColor(240, 242, 245))palette.setColor(QPalette.WindowText, QColor(51, 51, 51))palette.setColor(QPalette.Base, QColor(255, 255, 255))palette.setColor(QPalette.AlternateBase, QColor(248, 249, 250))palette.setColor(QPalette.Button, QColor(74, 144, 226))palette.setColor(QPalette.ButtonText, QColor(255, 255, 255))palette.setColor(QPalette.Highlight, QColor(74, 144, 226))palette.setColor(QPalette.HighlightedText, QColor(255, 255, 255))app.setPalette(palette)client EmailClient()client.show()sys.exit(app.exec_())功能说明 这个邮件客户端具有以下特点 现代化UI设计 蓝色主题与现代化界面元素分割布局左侧设置区右侧编辑区响应式设计适应1000x600窗口尺寸 邮件功能 完整的邮件编写功能多附件支持添加/移除SMTP邮件发送 用户体验优化 状态提示连接、登录、发送状态详细的错误反馈清晰的视觉层次结构 布局优化 左侧设置面板发件人信息、收件人、主题、附件管理右侧编辑面板邮件正文编辑区域底部状态栏显示操作状态和反馈 使用说明 左侧设置面板 输入发件人邮箱和密码输入收件人邮箱地址填写邮件主题管理附件添加/移除 右侧编辑面板 在正文区域编写邮件内容点击发送邮件按钮发送 状态反馈 状态栏显示当前操作状态发送成功/失败会有弹窗提示 技术特点 窗口尺寸 主窗口设置为1000x600像素提供宽敞的编辑空间使用QSplitter实现可调整大小的面板 邮件发送 支持Gmail SMTP服务器可修改为其他服务商支持纯文本邮件内容支持多个附件发送 错误处理 详细的错误捕获和反馈认证失败、发送失败等情况的专门处理 这个邮件客户端在保持功能完整性的同时提供了更加现代化和专业的用户界面充分利用了1000x600的窗口空间为用户带来更舒适的邮件编辑体验。
http://www.pierceye.com/news/942872/

相关文章:

  • 北京网站制作百度推广潜江资讯网二手房出售
  • 北京建网站软件深圳企业网站
  • 网站关键词互点备案网站简介怎么写
  • 网站建设报告书范文哈尔滨网站公司哪家好
  • 景观毕业设计作品网站公司网站销售平台建设费分录
  • 品牌网站建设还来大蝌蚪华为手机WordPress
  • 东莞制作企业网站公司网站营销活动页面制作
  • 有中文网站 怎么做英文网站企业网站建设 价格
  • 网络游戏网站开发建设工程施工合同样本
  • 陕西网站制作公司泸州中泸集团建设有限公司网站
  • 营销型网站建设的概念电子商务公司最低注册资本
  • 计划书网站推广的目录怎么做太原便宜做网站的公司哪家好
  • wordpress 直播插件麒麟seo外推软件
  • 网站检测报告哪里做寰宇seo
  • 徐州微信网站建设网站建设员课程
  • 做现货需要关注的网站wordpress+游戏网站
  • 佛山北京网站建设网络营销推广有哪些方法
  • 免费注册网站网址合肥网站建设第一品牌
  • 青州建网站网站建设seo虾哥网络
  • 网站框架怎么设计wordpress新闻页面模板下载
  • 国外网站平台做微信公众号的是哪个网站
  • 岳池住房和城乡建设厅网站wordpress插件清单 很多很全
  • 换域名对网站的影响做黑枸杞的公司网站
  • 昌平沙河网站建设深圳哪些公司需要做网站
  • 海尔网站建设策划书wordpress输出分类
  • 软文营销的方法广东网站建设seo优化制作设计
  • 网站怎样做推广计划创意设计ppt
  • 网站项目报价方案wordpress留言版添加
  • 网站改版协议目前哪个网站建设的最好
  • 网站建设风险管理计划长沙公司网站模板制作方案