python收发邮件客户端
时间:2022-06-01
本文章向大家介绍python收发邮件客户端,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
基于pyqt5 和 smtplib pop3标准邮箱协议开发邮件客户端
发送 SMTP
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#@Time: 2018/5/2上午11:27
#@Author:zhangrongwu
#@File:qt_email.py
from PyQt5 import QtCore, QtGui, QtWidgets
from PyQt5.QtWidgets import QMainWindow, QApplication
import sys
import smtplib
from email.mime.text import MIMEText
from email.header import Header
class Email_MaiWindow(object):
def setupUI(self, MainWindow):
MainWindow.setObjectName("MainWindow")
MainWindow.resize(800, 600)
self.centralwidget = QtWidgets.QWidget(MainWindow)
self.centralwidget.setObjectName("centralwidget")#相当于iOS contentview
self.label_Host = QtWidgets.QLabel(self.centralwidget)
self.label_Host.setGeometry(QtCore.QRect(30, 10, 200, 20))
self.label_Host.setObjectName("label_Host")
self.label_Host.setText("webmail.xinaogroup.com")#每个公司地址不一样
self.lineEdit = QtWidgets.QLineEdit(self.centralwidget)#相当于iOS addsubview 到父控件
self.lineEdit.setGeometry(QtCore.QRect(30, 50, 200, 30))#相当于iOS self.lineEdit.frame = ...
self.lineEdit.setObjectName("lineEdit")
self.lineEdit.setPlaceholderText("输入你的邮箱")#站位字符串
self.lineEdit_Pwd = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_Pwd.setGeometry(QtCore.QRect(30, 90, 200, 30))
self.lineEdit_Pwd.setObjectName("lineEdit_Pwd")
self.lineEdit_Pwd.setPlaceholderText("输入邮箱密码")
self.lineEdit_To = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_To.setGeometry(QtCore.QRect(260, 50, 200, 30))
self.lineEdit_To.setObjectName("lineEdit_To")
self.lineEdit_To.setPlaceholderText("收件人邮箱")
self.lineEdit_Subject = QtWidgets.QLineEdit(self.centralwidget)
self.lineEdit_Subject.setGeometry(QtCore.QRect(260, 90, 200, 30))
self.lineEdit_Subject.setObjectName("lineEdit_Subject")
self.lineEdit_Subject.setPlaceholderText("主题")
self.contentMsg = QtWidgets.QTextEdit(self.centralwidget)#多行文本框,相当于iOS UITextview
self.contentMsg.setGeometry(QtCore.QRect(30, 130, 400, 100))
self.contentMsg.setObjectName("contentMsg")
self.contentMsg.setPlaceholderText("填写发送的内容")
self.sendButton = QtWidgets.QPushButton(self.centralwidget)
self.sendButton.setGeometry(QtCore.QRect(30,250, 80, 50))
self.sendButton.setObjectName("sendButton")
self.sendButton.setStyleSheet("font:20pt "Agency FB";")
self.sendButton.setText("发送")
self.sendButton.clicked.connect(lambda : self.send())
MainWindow.setCentralWidget(self.centralwidget)#把父控件添加到窗口上
def send(self):
sender = self.lineEdit.text()
receiver = self.lineEdit_To.text()
content = self.contentMsg.toPlainText()
passWord = self.lineEdit_Pwd.text()
message = MIMEText(content, 'plain', 'utf-8')
message["From"] = Header(sender, 'utf-8')
message["To"] = Header(receiver, 'utf-8')
subject = self.lineEdit_Subject.text()
message['Subject'] = Header(subject, 'utf-8')
mailhost = self.label_Host.text()
# 构造附件1,传送当前目录下的 test.txt 文件
# att1 = MIMEText(open('test.txt', 'rb').read(), 'base64', 'utf-8')
# att1["Content-Type"] = 'application/octet-stream'
# # 这里的filename可以任意写,写什么名字,邮件中显示什么名字
# att1["Content-Disposition"] = 'attachment; filename="test.txt"'
# message.attach(att1)
#
# # 构造附件2,传送当前目录下的 runoob.txt 文件
# att2 = MIMEText(open('runoob.txt', 'rb').read(), 'base64', 'utf-8')
# att2["Content-Type"] = 'application/octet-stream'
# att2["Content-Disposition"] = 'attachment; filename="runoob.txt"'
# message.attach(att2)
try:
# smtpObj = smtplib.SMTP(localhost) #如果 SMTP 在你的本机上,你只需要指定服务器地址为 localhost 即可,无需密码登陆
smtpObj = smtplib.SMTP(mailhost, port=25)#25为 SMTP 默认端口号
smtpObj.set_debuglevel(1)
smtpObj.login(sender, passWord)
smtpObj.sendmail(sender, [receiver], message.as_string())
smtpObj.quit()
print("邮件发送成功")
except smtplib.SMTPException as msg:
print(msg)
print("邮件无法发送")
if __name__ == '__main__':
app = QApplication(sys.argv)
MainWindow = QMainWindow()#创建窗口
ui = Email_MaiWindow()#初始化Email_MaiWindow类
ui.setupUI(MainWindow)
MainWindow.show()
sys.exit(app.exec_())
接收 POP3
#!/usr/bin/env python
#-*- coding:utf-8 -*-
#@Time: 2018/5/10下午5:33
#@Author:zhangrongwu
#@File:qt_email_pop3.py
import poplib
email = input('Email:' )
password = input('Password:' )
pop3_server = input('POP3 server:' )
server = poplib.POP3(pop3_server)
print(server.getwelcome())
server.user(email)
server.pass_(password)
print('message: %s.size: %s' % server.stat())
resp, mails, octets = server.list()
print(mails)
index = len(mails)
resp, lines, octets = server.retr(index)
msg_content = 'rn'.join(lines)
# msg = Parser().parsestr(msg_content)
server.quit()
- Html5模拟通讯录人员排序(sen.js)
- Goroutine + Channel 实践
- Http和Https的区别
- JavaScript实现单击全选 ,再次点击取消全选
- 连AI都在看《英雄联盟》游戏直播
- MAC使用adb工具
- 并发编程之master-worker模式
- Android WebView全面总结
- Url参数中出现+、空格、=、%、&、#等字符的解决办法
- 解决CSS垂直居中的几种方法(基于绝对定位,基于视口单位,Flexbox方法)
- Go语言学习之cgo(golang与C语言相互调用)
- golang之旅--数据类型之字符串
- Android保存图片到系统图库
- 基于Vue.js的大型报告页项目实现过程及问题总结(二)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 浅谈laravel数据库查询返回的数据形式
- PHP设计模式之策略模式(Strategy)入门与应用案例详解
- 基于Python3读写INI配置文件过程解析
- laravel 解决paginate查询多个字段报错的问题
- php判断/计算闰年的方法小结【三种方法】
- Laravel定时任务的每秒执行代码
- PHP学习记录之面向对象(Object-oriented programming,OOP)基础【类、对象、继承等】
- Python通过zookeeper实现分布式服务代码解析
- laravel 实现向公共模板中传值 (view composer)
- PHP学习记录之面向对象(Object-oriented programming,OOP)基础【接口、抽象类、静态方法等】
- laravel 解决crontab不执行的问题
- PHP+Redis开发的书签案例实战详解
- Python持续监听文件变化代码实例
- laravel框架如何设置公共头和公共尾
- PHP结合Redis+MySQL实现冷热数据交换应用案例详解