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之Python安装
Sep 12 Python
python中执行shell命令的几个方法小结
Sep 18 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
Python中类型关系和继承关系实例详解
May 25 Python
python简单分割文件的方法
Jul 30 Python
python中的错误处理
Apr 10 Python
python爬虫获取小区经纬度以及结构化地址
Dec 30 Python
python 求某条线上特定x值或y值的点坐标方法
Jul 09 Python
python列表,字典,元组简单用法示例
Jul 11 Python
全面了解django的缓存机制及使用方法
Jul 22 Python
Python安装selenium包详细过程
Jul 23 Python
django的模型类管理器——数据库操作的封装详解
Apr 01 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/27 PHP
Admin generator, filters and I18n
2011/10/06 PHP
PHP 数据结构队列(SplQueue)和优先队列(SplPriorityQueue)简单使用实例
2015/05/12 PHP
laravel 框架实现无限级分类的方法示例
2019/10/31 PHP
JavaScript国旗变换效果代码
2008/08/13 Javascript
js中的值类型和引用类型小结 文字说明与实例
2010/12/12 Javascript
基于JQuery 的消息提示框效果代码
2011/07/31 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
基于Bootstrap实现城市三级联动
2017/11/23 Javascript
Bootstrap4如何定制自己的颜色和风格
2018/02/26 Javascript
vue.js实现插入数值与表达式的方法分析
2018/07/06 Javascript
jquery 通过ajax请求获取后台数据显示在表格上的方法
2018/08/08 jQuery
解决ie11 SCRIPT5011:不能执行已释放Script的代码问题
2019/05/05 Javascript
Vue项目中ESlint规范示例代码
2019/07/04 Javascript
jQuery实现的移动端图片缩放功能组件示例
2020/05/01 jQuery
python使用win32com库播放mp3文件的方法
2015/05/30 Python
通过数据库向Django模型添加字段的示例
2015/07/21 Python
Python+matplotlib+numpy实现在不同平面的二维条形图
2018/01/02 Python
python 切换root 执行命令的方法
2019/01/19 Python
pandas把所有大于0的数设置为1的方法
2019/01/26 Python
如何使用python把ppt转换成pdf
2019/06/29 Python
python将三维数组展开成二维数组的实现
2019/11/30 Python
python+selenium+chrome实现淘宝购物车秒杀自动结算
2021/01/07 Python
优秀毕业生推荐信
2013/11/02 职场文书
测绘工程系学生的自我评价
2013/11/30 职场文书
追悼会子女答谢词
2014/01/28 职场文书
电脑销售顾问自荐信
2014/01/29 职场文书
网络编辑岗位职责范本
2014/02/10 职场文书
好学生评语大全
2014/05/05 职场文书
法制宣传月活动方案
2014/05/11 职场文书
保护水资源的标语
2014/06/17 职场文书
买卖合同协议书范本
2014/10/18 职场文书
2014年志愿者工作总结
2014/11/20 职场文书
2014年统战工作总结
2014/12/09 职场文书
六年级语文教学反思
2016/03/03 职场文书
两行代码解决Jupyter Notebook中文不能显示的问题
2021/04/24 Python