利用python发送和接收邮件


Posted in Python onSeptember 27, 2016

关于电子邮件 

大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用;然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师,注册网站需要邮箱,找工作也需要邮箱;那么电子邮箱是什么原理呢? 

发送邮件 

SMTP协议 

SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式。SMTP协议属于TCP/IP协议簇,它帮助每台计算机在发送或中转信件时找到下一个目的地。通过SMTP协议所指定的服务器,就可以把E-mail寄到收信人的服务器上了,只要几分钟。 

python中的SMTP模块 

使用SMTP的基本步骤
 1.连接服务器
 2.登录
 3.发送服务请求
 4.退出

import smtplib
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr


def send_email(from_addr, to_addr, subject, password):
  msg = MIMEText("邮件正文",'html','utf-8')
  msg['From'] = u'<%s>' % from_addr
  msg['To'] = u'<%s>' % to_addr
  msg['Subject'] = subject

  smtp = smtplib.SMTP_SSL('smtp.163.com', 465)
  smtp.set_debuglevel(1)
  smtp.ehlo("smtp.163.com")
  smtp.login(from_addr, password)
  smtp.sendmail(from_addr, [to_addr], msg.as_string())


if __name__ == "__main__":
  # 这里的密码是开启smtp服务时输入的客户端登录授权码,并不是邮箱密码
  # 现在很多邮箱都需要先开启smtp才能这样发送邮件
  send_email(u"from_addr",u"to_addr",u"主题",u"password")

上面演示了用smtplib来发送邮件,并且使用了SSL加密,这样相对安全,使用了email来构造邮件的内容,这里发送的是纯文本的内容,我觉得最应该注意的就是这里邮箱的密码。另外各个公司的邮件服务器和端口都可能不同,使用前可以先查一下 

这里列几个常用的:

利用python发送和接收邮件

接收邮件 

POP3和IMAP 

POP是指邮局协议,目的是让用户可以访问邮箱服务器中的邮件,允许用户从服务器上把邮件存储到本地主机(即自己的计算机)上,同时删除保存在邮件服务器上的邮件,而POP3服务器则是遵循POP3协议的接收邮件服务器,用来接收电子邮件的。 

后来又出现了IMAP协议(Interactive Mail Access Protocol),即交互式邮件访问协议,与POP3的不同在于:开启了IMAP后,在电子邮件客户端收取的邮件仍然保留在服务器上,同时在客户端上的操作都会反馈到服务器上,如:删除邮件,标记已读等,服务器上的邮件也会做相应的动作。 

使用POP3 

python的poplib模块支持POP3,基本步骤:
 1.连接到服务器
 2.登录
 3.发出服务请求
 4.退出 

poplib的常用方法:

利用python发送和接收邮件

例子

from poplib import POP3

p = POP3('pop.163.com')
p.user('xxxxxxx@163.com')
p.pass_('xxxxxxxx')

p.stat()
...

p.quit()

使用IMAP 

python中的imaplib包支持IMAP4 

常用方法:

利用python发送和接收邮件

例子

import getpass, imaplib

M = imaplib.IMAP4()
M.login(getpass.getuser(), getpass.getpass())
M.select()
typ, data = M.search(None, 'ALL')
for num in data[0].split():
  typ, data = M.fetch(num, '(RFC822)')
  print 'Message %s\n%s\n' % (num, data[0][1])
M.close()
M.logout()

更详细的内容可以看官方文档:
 •smtplib模块:https://docs.python.org/2/library/smtplib.html

 •email模块:https://docs.python.org/2/library/email.html

 •poplib模块:https://docs.python.org/2/library/poplib.html

 •imaplib模块:https://docs.python.org/2/library/imaplib.html

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
多线程爬虫批量下载pcgame图片url 保存为xml的实现代码
Jan 17 Python
Python如何读取MySQL数据库表数据
Mar 11 Python
Python连接SQLServer2000的方法详解
Apr 19 Python
python3 遍历删除特定后缀名文件的方法
Apr 23 Python
Python决策树之基于信息增益的特征选择示例
Jun 25 Python
Python基于滑动平均思想实现缺失数据填充的方法
Feb 21 Python
Django文件存储 默认存储系统解析
Aug 02 Python
python对execl 处理操作代码
Jun 22 Python
Python基于unittest实现测试用例执行
Nov 25 Python
在Windows下安装配置CPU版的PyTorch的方法
Apr 02 Python
如何将numpy二维数组中的np.nan值替换为指定的值
May 14 Python
Github 使用python对copilot做些简单使用测试
Apr 14 Python
实现python版本的按任意键继续/退出
Sep 26 #Python
Linux 下 Python 实现按任意键退出的实现方法
Sep 25 #Python
利用Python为iOS10生成图标和截屏
Sep 24 #Python
使用Python多线程爬虫爬取电影天堂资源
Sep 23 #Python
Python 爬虫模拟登陆知乎
Sep 23 #Python
python 自动化将markdown文件转成html文件的方法
Sep 23 #Python
Python增量循环删除MySQL表数据的方法
Sep 23 #Python
You might like
yii操作cookie实例简介
2014/07/09 PHP
在一个form用一个SUBMIT(或button)分别提交到两个处理表单页面的代码
2007/02/15 Javascript
JavaScript面向对象编程
2008/03/02 Javascript
jquery tools 系列 scrollable(2)
2009/09/06 Javascript
JS字符串累加Array不一定比字符串累加快(根据电脑配置)
2012/05/14 Javascript
按钮接受回车事件的三种实现方法
2014/06/06 Javascript
Function.prototype.apply()与Function.prototype.call()小结
2016/04/27 Javascript
Javascript6中字符串的四个新用法分享
2016/09/11 Javascript
AngularJS 指令的交互详解及实例代码
2016/09/14 Javascript
AngularJS的依赖注入实例分析(使用module和injector)
2017/01/19 Javascript
XMLHttpRequest对象_Ajax异步请求重点(推荐)
2017/09/28 Javascript
JavaScript实现数值自动增加动画
2017/12/28 Javascript
vue中$set的使用(结合在实际应用中遇到的坑)
2018/07/10 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
JavaScript防止全局变量污染的方法总结
2018/08/02 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
详解基于原生JS验证表单组件xy-form
2019/08/20 Javascript
Vue中实现回车键切换焦点的方法
2020/02/19 Javascript
python多线程编程方式分析示例详解
2013/12/06 Python
2018年Python值得关注的开源库、工具和开发者(总结篇)
2018/01/04 Python
python dataframe 输出结果整行显示的方法
2018/06/14 Python
解决django同步数据库的时候app models表没有成功创建的问题
2019/08/09 Python
浅谈Django+Gunicorn+Nginx部署之路
2019/09/11 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
彻底搞懂 python 中文乱码问题(深入分析)
2020/02/28 Python
python实现简单坦克大战
2020/03/27 Python
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
Java中的基本数据类型所占存储空间大小固定的吗
2012/02/15 面试题
介绍一下Ruby的特点
2013/01/20 面试题
销售实习自我鉴定
2013/12/07 职场文书
函授生自我鉴定
2014/03/25 职场文书
小学生我的梦想演讲稿
2014/08/21 职场文书
《正面管教》读后有感:和善而坚定的旅程
2019/12/19 职场文书
深入理解python协程
2021/06/15 Python
SpringCloud之@FeignClient()注解的使用方式
2021/09/25 Java/Android