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 while 循环使用的简单实例
Jun 08 Python
python中MethodType方法介绍与使用示例
Aug 03 Python
Python数据结构与算法之完全树与最小堆实例
Dec 13 Python
神经网络python源码分享
Dec 15 Python
python复制文件到指定目录的实例
Apr 27 Python
使用Python实现从各个子文件夹中复制指定文件的方法
Oct 25 Python
linux查找当前python解释器的位置方法
Feb 20 Python
python分数表示方式和写法
Jun 26 Python
Python 元组拆包示例(Tuple Unpacking)
Dec 24 Python
python map比for循环快在哪
Sep 21 Python
Python实现定时监测网站运行状态的示例代码
Sep 30 Python
Python字符串格式化方式
Apr 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/07/19 PHP
php 读取shell管道传输过来的内容
2010/03/01 PHP
php实现的支持断点续传的文件下载类
2014/09/23 PHP
ThinkPHP中数据操作案例分析
2015/09/27 PHP
Javascript学习笔记二 之 变量
2010/12/15 Javascript
JavaScript高级程序设计(第3版)学习笔记6 初识js对象
2012/10/11 Javascript
js数组Array sort方法使用深入分析
2013/02/21 Javascript
JS获取计算机mac地址以及IP的实现方法
2014/01/08 Javascript
SeaJS入门教程系列之使用SeaJS(二)
2014/03/03 Javascript
JavaScript函数定义的常见注意事项小结
2014/09/16 Javascript
JavaScript的jQuery库插件的简要开发指南
2015/08/12 Javascript
Jquery easyui开启行编辑模式增删改操作
2016/01/14 Javascript
完美解决jQuery符号$与其他javascript 库、框架冲突的问题
2016/08/09 Javascript
Bootstrap基本模板的使用和理解1
2016/12/14 Javascript
webpack配置的最佳实践分享
2017/04/21 Javascript
bootstrap-table.js扩展分页工具栏(增加跳转到xx页)功能
2017/12/28 Javascript
vue源码解析之事件机制原理
2018/04/21 Javascript
微信小程序自定义键盘 内部虚拟支付
2018/12/20 Javascript
JavaScript实现数字前补“0”的五种方法示例
2019/01/03 Javascript
node.JS事件机制与events事件模块的使用方法详解
2020/02/06 Javascript
python 中文字符串的处理实现代码
2009/10/25 Python
Python Web框架Flask中使用百度云存储BCS实例
2015/02/08 Python
python使用BeautifulSoup分页网页中超链接的方法
2015/04/04 Python
对python中的for循环和range内置函数详解
2018/04/17 Python
python 获取字符串MD5值方法
2018/05/29 Python
python画双y轴图像的示例代码
2019/07/07 Python
详解Python并发编程之从性能角度来初探并发编程
2019/08/23 Python
python函数声明和调用定义及原理详解
2019/12/02 Python
细数nn.BCELoss与nn.CrossEntropyLoss的区别
2020/02/29 Python
HTML5学习笔记之History API
2015/02/26 HTML / CSS
法学院毕业生求职信
2014/06/25 职场文书
迎七一演讲稿
2014/09/12 职场文书
高一课前三分钟演讲稿
2014/09/13 职场文书
授权收款委托书
2014/09/23 职场文书
2015年招聘工作总结
2014/12/12 职场文书
狮子林导游词
2015/02/03 职场文书