利用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 subprocess模块学习总结
Mar 13 Python
Python使用redis pool的一种单例实现方式
Apr 16 Python
教你用Python脚本快速为iOS10生成图标和截屏
Sep 22 Python
python+matplotlib绘制简单的海豚(顶点和节点的操作)
Jan 02 Python
Django之Mode的外键自关联和引用未定义的Model方法
Dec 15 Python
Apache部署Django项目图文详解
Jul 30 Python
Python切图九宫格的实现方法
Oct 10 Python
python模拟预测一下新型冠状病毒肺炎的数据
Feb 01 Python
python实现人机猜拳小游戏
Feb 03 Python
Python API len函数操作过程解析
Mar 05 Python
Python3实现建造者模式的示例代码
Jun 28 Python
Python3爬虫带上cookie的实例代码
Jul 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个人网站架设连环讲(二)
2006/10/09 PHP
php 无限级 SelectTree 类
2009/05/19 PHP
php入门学习知识点五 关于php数组的几个基本操作
2011/07/14 PHP
smarty简单应用实例
2015/11/03 PHP
PHP后台实现微信小程序登录
2018/08/03 PHP
详解PHP素材图片上传、下载功能
2019/04/12 PHP
Nigma vs Liquid BO3 第二场2.13
2021/03/10 DOTA
JavaScript.Encode手动解码技巧
2010/07/14 Javascript
JQuery中getJSON的使用方法
2010/12/13 Javascript
5个最佳的Javascript日期处理类库分享
2012/04/15 Javascript
JS自动适应的图片弹窗实例
2013/06/29 Javascript
mvc 、bootstrap 结合分布式图简单实现分页
2016/10/10 Javascript
微信小程序开发经验总结(推荐)
2017/01/11 Javascript
JS异步处理的进化史深入讲解
2019/08/25 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
javascript 构建模块化开发过程解析
2019/09/11 Javascript
vue倒计时刷新页面不会从头开始的解决方法
2020/03/03 Javascript
Vue实现摇一摇功能(兼容ios13.3以上)
2021/01/26 Vue.js
[40:05]LGD vs Winstrike 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:03:42]VP vs VGJ.S 2018国际邀请赛小组赛BO2 第一场 8.19
2018/08/21 DOTA
用Python的pandas框架操作Excel文件中的数据教程
2015/03/31 Python
Django中实现点击图片链接强制直接下载的方法
2015/05/14 Python
[原创]教女朋友学Python3(二)简单的输入输出及内置函数查看
2017/11/30 Python
有趣的python小程序分享
2017/12/05 Python
Python人脸识别初探
2017/12/21 Python
详解django+django-celery+celery的整合实战
2019/03/19 Python
Pytorch 实现自定义参数层的例子
2019/08/17 Python
python3 webp转gif格式的实现示例
2019/12/10 Python
PyQt5的相对布局管理的实现
2020/08/07 Python
python中not、and和or的优先级与详细用法介绍
2020/11/03 Python
初级会计求职信范文
2014/02/15 职场文书
工作失误检讨书范文
2015/01/26 职场文书
婚礼伴郎致辞
2015/07/28 职场文书
2015中秋祝酒词
2015/08/12 职场文书
python中sqllite插入numpy数组到数据库的实现方法
2021/06/21 Python
openstack云计算keystone组件工作介绍
2022/04/20 Servers