利用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 相关文章推荐
搞笑的程序猿:看看你是哪种Python程序员
Jun 12 Python
python运行其他程序的实现方法
Jul 14 Python
Python3实现爬虫爬取赶集网列表功能【基于request和BeautifulSoup模块】
Dec 05 Python
pycharm创建一个python包方法图解
Apr 10 Python
cProfile Python性能分析工具使用详解
Jul 22 Python
Python爬虫 urllib2的使用方法详解
Sep 23 Python
django实现用户注册实例讲解
Oct 30 Python
python自动识别文本编码格式代码
Dec 26 Python
python 解决flask 图片在线浏览或者直接下载的问题
Jan 09 Python
Python 安装 virturalenv 虚拟环境的教程详解
Feb 21 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
python+opencv3.4.0 实现HOG+SVM行人检测的示例代码
Jan 28 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
PHP Token(令牌)设计
2008/03/15 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
php解析base64数据生成图片的方法
2016/12/06 PHP
struts2 jquery 打造无限层次的树
2009/10/23 Javascript
JS鼠标事件大全 推荐收藏
2011/11/01 Javascript
js 固定悬浮效果实现思路代码
2013/08/02 Javascript
JavaScript中的值类型详细介绍
2014/12/29 Javascript
JavaScript在浏览器标题栏上显示当前日期和时间的方法
2015/03/19 Javascript
jQuery form插件的使用之处理server返回的JSON, XML,HTML数据
2016/01/26 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
React快速入门教程
2017/01/17 Javascript
微信小程序动态的加载数据实例代码
2017/04/14 Javascript
Vue.js中轻松解决v-for执行出错的三个方案
2017/06/09 Javascript
基于Nodejs的Tcp封包和解包的理解
2018/09/19 NodeJs
vue+layui实现select动态加载后台数据的例子
2019/09/20 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
python自然语言编码转换模块codecs介绍
2015/04/08 Python
tornado 多进程模式解析
2018/01/15 Python
浅谈Python用QQ邮箱发送邮件时授权码的问题
2018/01/29 Python
利用Python如何将数据写到CSV文件中
2018/06/05 Python
python类的实例化问题解决
2019/08/31 Python
使用python将最新的测试报告以附件的形式发到指定邮箱
2019/09/20 Python
html5文本内容_动力节点Java学院整理
2017/07/11 HTML / CSS
Easy Spirit官网:美国休闲鞋履中的代表品牌
2019/04/12 全球购物
添柏岚英国官方网站:Timberland英国
2019/11/28 全球购物
阿姆斯特丹城市卡:Amsterdam Pass
2019/12/01 全球购物
描述JSP和Servlet的区别、共同点、各自应用的范围
2012/10/02 面试题
师范毕业生自荐信
2013/10/17 职场文书
人力资源部副职的竞聘演讲稿
2014/01/07 职场文书
追悼会上的答谢词
2014/01/10 职场文书
文明家庭先进事迹材
2014/01/27 职场文书
渔夫的故事教学反思
2014/02/14 职场文书
研修心得体会
2014/09/04 职场文书
维稳承诺书
2015/01/20 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
关于python pygame游戏进行声音添加的技巧
2021/10/24 Python