Python实现发送与接收邮件的方法详解


Posted in Python onMarch 28, 2018

本文实例讲述了Python实现发送与接收邮件的方法。分享给大家供大家参考,具体如下:

一、发送邮件

这里实现给网易邮箱发送邮件功能:

import smtplib
import tkinter
class Window:
  def __init__(self,root):
    label1 = tkinter.Label(root,text='SMTP')
    label2 = tkinter.Label(root,text='Port')
    label3 = tkinter.Label(root,text='用户名')
    label4 = tkinter.Label(root,text='密码')
    label5 = tkinter.Label(root,text='收件人')
    label6 = tkinter.Label(root,text='主题')
    label7 = tkinter.Label(root,text='发件人')
    label1.place(x=5,y=5)
    label2.place(x=5,y=30)
    label3.place(x=5,y=55)
    label4.place(x=5,y=80)
    label5.place(x=5,y=105)
    label6.place(x=5,y=130)
    label7.place(x=5,y=155)
    self.entryPop = tkinter.Entry(root)
    self.entryPort = tkinter.Entry(root)
    self.entryUser = tkinter.Entry(root)
    self.entryPass = tkinter.Entry(root,show = '*')
    self.entryTo = tkinter.Entry(root)
    self.entrySub = tkinter.Entry(root)
    self.entryFrom = tkinter.Entry(root)
    self.entryPort.insert(tkinter.END,'25')
    self.entryPop.place(x=50,y=5)
    self.entryPort.place(x=50,y=30)
    self.entryUser.place(x=50,y=55)
    self.entryPass.place(x=50,y=80)
    self.entryTo.place(x=50,y=105)
    self.entrySub.place(x=50,y=130)
    self.entryFrom.place(x=50,y=155)
    self.get = tkinter.Button(root,text='发送邮件',command = self.Get)
    self.get.place(x=60,y=180)
    self.text=tkinter.Text(root)
    self.text.place(y=220)
  def Get(self):
    try:
      host = self.entryPop.get()
      port =int(self.entryPort.get())
      user = self.entryUser.get()
      pw = self.entryPass.get()
      fromaddr = self.entryFrom.get()
      toaddr=self.entryTo.get()
      subject=self.entrySub.get()
      text = self.text.get(1.0,tkinter.END)
      msg =("From:%s\nTo:%s\nSubject:%s\n\n"
         % (fromaddr,toaddr,subject))
      msg = msg+text
      smtp=smtplib.SMTP(host,port)
      smtp.set_debuglevel(1)
      smtp.login(user,pw)
      smtp.sendmail(fromaddr,toaddr,msg)
      smtp.quit()
    except Exception as e:
      self.text.insert(tkinter.END,'发送错误\n')
root =tkinter.Tk()
window=Window(root)
root.minsize(600,400)
root.mainloop()

运行结果

Python实现发送与接收邮件的方法详解

二、接收邮件

这里实现从网易POP3服务器接收邮件:

import poplib
import re
import tkinter
class Window:
  def __init__(self,root):
    label1 = tkinter.Label(root,text='POP3')
    label2 = tkinter.Label(root,text='Port')
    label3 = tkinter.Label(root,text='用户名')
    label4 = tkinter.Label(root,text='密码')
    label1.place(x=5,y=5)
    label2.place(x=5,y=30)
    label3.place(x=5,y=55)
    label4.place(x=5,y=80)
    self.entryPop = tkinter.Entry(root)
    self.entryPort = tkinter.Entry(root)
    self.entryUser = tkinter.Entry(root)
    self.entryPass = tkinter.Entry(root,show = '*')
    self.entryPort.insert(tkinter.END,'110')
    self.entryPop.place(x=50,y=5)
    self.entryPort.place(x=50,y=30)
    self.entryUser.place(x=50,y=55)
    self.entryPass.place(x=50,y=80)
    self.get = tkinter.Button(root,text='收取邮件',command = self.Get)
    self.get.place(x=60,y=120)
    self.text=tkinter.Text(root)
    self.text.place(y=150)
  def Get(self):
    try:
      host = self.entryPop.get()
      port =int(self.entryPort.get())
      user = self.entryUser.get()
      pw = self.entryPass.get()
      pop=poplib.POP3(host)
      pop.user(user)
      pop.pass_(pw)
      stat=pop.stat()
      self.text.insert(tkinter.END,'Staus:%d message(s),%d bytes\n' % stat)
      rx_headers = re.compile(r"^(From|To|Subject)")
      for n in range(stat[0]):
        response,lines,bytes = pop.top(n+1,10)
        self.text.insert(tkinter.END,"Message %d (%d bytes)\n" % (n+1,bytes))
        self.text.insert(tkinter.END,"-"*30+'\n')
        str_lines=[]
        for l in lines:
          str_lines.append(l.decode(encoding = 'utf-8'))
        self.text.insert(tkinter.END,"\n".join(filter(rx_headers.match,str_lines)))
        self.text.insert(tkinter.END,'\n')
        self.text.insert(tkinter.END,"-"*30+'\n')
    except Exception as e:
        self.text.insert(tkinter.END,'接收错误\n')
root =tkinter.Tk()
window=Window(root)
root.mainloop()

运行结果

Python实现发送与接收邮件的方法详解

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
Python中实现三目运算的方法
Jun 21 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
Jan 29 Python
Selenium 模拟浏览器动态加载页面的实现方法
May 16 Python
pytorch 使用单个GPU与多个GPU进行训练与测试的方法
Aug 19 Python
python 实现二维字典的键值合并等函数
Dec 06 Python
Pytorch中.new()的作用详解
Feb 18 Python
matplotlib quiver箭图绘制案例
Apr 17 Python
Python退出时强制运行一段代码的实现方法
Apr 29 Python
python numpy矩阵信息说明,shape,size,dtype
May 22 Python
Python 必须了解的5种高级特征
Sep 10 Python
一文搞懂如何实现Go 超时控制
Mar 30 Python
python利用while求100内的整数和方式
Nov 07 Python
Python实现线程状态监测简单示例
Mar 28 #Python
python实现朴素贝叶斯分类器
Mar 28 #Python
详解Python中where()函数的用法
Mar 27 #Python
Django基于ORM操作数据库的方法详解
Mar 27 #Python
利用Python批量提取Win10锁屏壁纸实战教程
Mar 27 #Python
Django学习笔记之ORM基础教程
Mar 27 #Python
Python使用xlwt模块操作Excel的方法详解
Mar 27 #Python
You might like
PHP执行速率优化技巧小结
2008/03/15 PHP
php时间不正确的解决方法
2008/04/09 PHP
对于ThinkPHP框架早期版本的一个SQL注入漏洞详细分析
2014/07/04 PHP
Laravel 5.4.36中session没有保存成功问题的解决
2018/02/19 PHP
PHP预定义超全局数组变量小结
2018/08/20 PHP
JavaScript 设计模式之组合模式解析
2010/04/09 Javascript
web基于浏览器的本地存储方法应用
2012/11/27 Javascript
JQuery的Ajax中Post方法传递中文出现乱码的解决方法
2014/10/21 Javascript
不用一句js代码初始化组件
2016/01/27 Javascript
JavaScript过滤字符串中的中文与空格方法汇总
2016/03/07 Javascript
checkbox 选中一个另一个checkbox也会选中的实现代码
2016/07/09 Javascript
JavaScript自定义函数实现查找两个字符串最长公共子串的方法
2016/11/24 Javascript
angular+ionic返回上一页并刷新页面
2017/08/08 Javascript
vue组件父子间通信之综合练习(聊天室)
2017/11/07 Javascript
解决Vue使用mint-ui loadmore实现上拉加载与下拉刷新出现一个页面使用多个上拉加载后冲突问题
2017/11/07 Javascript
JS中超越现实的匿名函数用法实例分析
2019/06/21 Javascript
react koa rematch 如何打造一套服务端渲染架子
2019/06/26 Javascript
javascript canvas实现简易时钟例子
2020/09/05 Javascript
跟老齐学Python之编写类之四再论继承
2014/10/11 Python
Python Paramiko模块的安装与使用详解
2016/11/18 Python
python使用xslt提取网页数据的方法
2018/02/23 Python
python 重命名轴索引的方法
2018/11/10 Python
Python实现的字典排序操作示例【按键名key与键值value排序】
2018/12/21 Python
python笔记_将循环内容在一行输出的方法
2019/08/08 Python
安装2019Pycharm最新版本的教程详解
2019/10/22 Python
Django自关联实现多级联动查询实例
2020/05/19 Python
SmartBuyGlasses意大利:购买太阳镜、眼镜和隐形眼镜
2018/11/20 全球购物
沃尔玛加拿大:Walmart.ca
2020/03/02 全球购物
Ajax实现页面无刷新留言效果
2021/03/24 Javascript
会计专业毕业生自荐信范文
2013/12/20 职场文书
个人收入证明范本
2014/01/12 职场文书
简单的辞职信范文
2014/01/18 职场文书
房屋转让协议书范本
2014/04/11 职场文书
企业公益活动策划方案
2014/08/24 职场文书
小学生勤俭节约倡议书
2015/04/29 职场文书
pytorch 如何使用float64训练
2021/05/24 Python