利用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 相关文章推荐
解决出现Incorrect integer value: '' for column 'id' at row 1的问题
Oct 29 Python
Python语言描述随机梯度下降法
Jan 04 Python
python微信公众号之关键词自动回复
Jun 15 Python
Django 登陆验证码和中间件的实现
Aug 17 Python
python 使用re.search()筛选后 选取部分结果的方法
Nov 28 Python
PyCharm鼠标右键不显示Run unittest的解决方法
Nov 30 Python
在python里面运用多继承方法详解
Jul 01 Python
python常用排序算法的实现代码
Nov 08 Python
python pyenv多版本管理工具的使用
Dec 23 Python
Flask 上传自定义头像的实例详解
Jan 09 Python
Jupyter notebook命令和编辑模式常用快捷键汇总
Nov 17 Python
在 Python 中利用 Pool 进行多线程
Apr 24 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 array_flip() 删除数组重复元素
2009/01/14 PHP
PHP文件缓存类示例分享
2015/01/30 PHP
支持ie与FireFox的剪切板操作代码
2009/09/28 Javascript
获取鼠标在div中的相对位置的实现代码
2013/12/30 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
Flow之一个新的Javascript静态类型检查器
2015/12/21 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
jQuery实现点击任意位置弹出层外关闭弹出层效果
2016/10/19 Javascript
JS处理数据四舍五入(tofixed与round的区别详解)
2017/10/26 Javascript
Vue.js递归组件构建树形菜单
2017/12/24 Javascript
nodejs结合Socket.IO实现的即时通讯功能详解
2018/01/12 NodeJs
WebSocket的通信过程与实现方法详解
2018/04/29 Javascript
解决VUE mounted 钩子函数执行时 img 未加载导致页面布局的问题
2020/07/27 Javascript
[04:45]上海特级锦标赛主赛事第三日TOP10
2016/03/05 DOTA
[15:20]DOTA2亚洲邀请赛总决赛开幕式表演:羽泉献唱
2017/04/05 DOTA
使用优化器来提升Python程序的执行效率的教程
2015/04/02 Python
python中管道用法入门实例
2015/06/04 Python
django轻松使用富文本编辑器CKEditor的方法
2017/03/30 Python
利用信号如何监控Django模型对象字段值的变化详解
2017/11/27 Python
python中ASCII码和字符的转换方法
2018/07/09 Python
Linux下Python安装完成后使用pip命令的详细教程
2018/11/22 Python
对sklearn的使用之数据集的拆分与训练详解(python3.6)
2018/12/14 Python
python爬虫的一个常见简单js反爬详解
2019/07/09 Python
用Python画小女孩放风筝的示例
2019/11/23 Python
pycharm双击无响应(打不开问题解决办法)
2020/01/10 Python
pycharm远程连接服务器并配置python interpreter的方法
2020/12/23 Python
Python字符串对齐、删除字符串不需要的内容以及格式化打印字符
2021/01/23 Python
中专三年学习的个人自我评价
2013/12/12 职场文书
《宋庆龄故居的樟树》教学反思
2014/04/07 职场文书
学校食堂食品安全责任书
2014/07/28 职场文书
交通事故赔偿协议书
2014/10/16 职场文书
终止劳动合同证明书样本
2014/11/19 职场文书
水电工岗位职责
2015/02/14 职场文书
公务员廉洁从政心得体会
2016/01/19 职场文书
Jupyter Notebook内使用argparse报错的解决方案
2021/06/03 Python
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
2022/04/20 MySQL