利用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 相关文章推荐
轻量级的Web框架Flask 中模块化应用的实现
Sep 11 Python
Python实现针对含中文字符串的截取功能示例
Sep 22 Python
Python中int()函数的用法浅析
Oct 17 Python
浅谈DataFrame和SparkSql取值误区
Jun 09 Python
利用Python将每日一句定时推送至微信的实现方法
Aug 13 Python
小白入门篇使用Python搭建点击率预估模型
Oct 12 Python
Python中flatten( )函数及函数用法详解
Nov 02 Python
Python设计模式之简单工厂模式实例详解
Jan 22 Python
一篇文章搞定Python操作文件与目录
Aug 13 Python
django 读取图片到页面实例
Mar 27 Python
Python从MySQL数据库中面抽取试题,生成试卷
Jan 14 Python
pandas 实现将NaN转换为None
May 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
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
php上传文件并显示上传进度的方法
2015/03/24 PHP
php对数组内元素进行随机调换的方法
2015/05/12 PHP
PHP文件系统管理(实例讲解)
2017/09/19 PHP
jQuery 操作下拉列表框实现代码
2010/02/22 Javascript
JavaScript避免代码的重复执行经验技巧分享
2014/04/17 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
jQuery简单实现QQ空间点赞已经取消点赞
2015/04/02 Javascript
Node.js中路径处理模块path详解
2016/11/14 Javascript
jQuery Validate验证框架详解(推荐)
2016/12/17 Javascript
AngularJS实现页面跳转后自动弹出对话框实例代码
2017/08/02 Javascript
解决vuejs 使用value in list 循环遍历数组出现警告的问题
2018/09/26 Javascript
详解express使用vue-router的history踩坑
2019/06/05 Javascript
element表格翻页第2页从1开始编号(后端从0开始分页)
2019/12/10 Javascript
使用React-Router实现前端路由鉴权的示例代码
2020/07/26 Javascript
[27:28]Ti4 冒泡赛第二天 iG vs NEWBEE 1
2014/07/15 DOTA
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
python实现简单登陆系统
2018/10/18 Python
python爬取酷狗音乐排行榜
2019/02/20 Python
基于Python的PIL库学习详解
2019/05/10 Python
Python读写压缩文件的方法
2020/07/30 Python
scrapy中如何设置应用cookies的方法(3种)
2020/09/22 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
业务经理岗位职责
2013/11/11 职场文书
财会自我鉴定范文
2013/12/27 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
特教教师先进事迹
2014/05/21 职场文书
基层党建工作宣传标语
2014/06/24 职场文书
高中毕业典礼演讲稿
2014/09/09 职场文书
超市开业庆典活动策划方案
2014/09/15 职场文书
实习指导老师意见
2015/06/04 职场文书
复制别人的成功真的会成功吗?
2019/10/17 职场文书
HTML基础-标签分类(闭合标签,空标签,块级元素,行内元素,行级块元素,可替换元素)
2021/03/31 HTML / CSS
python3.9之你应该知道的新特性详解
2021/04/29 Python
MySQL约束(创建表时的各种条件说明)
2022/06/21 MySQL