利用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 相关文章推荐
Django接受前端数据的几种方法总结
Nov 04 Python
python模块简介之有序字典(OrderedDict)
Dec 01 Python
python爬虫之BeautifulSoup 使用select方法详解
Oct 23 Python
python3读取csv和xlsx文件的实例
Jun 22 Python
用python实现k近邻算法的示例代码
Sep 06 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
对Python中小整数对象池和大整数对象池的使用详解
Jul 09 Python
ML神器:sklearn的快速使用及入门
Jul 11 Python
python自带tkinter库实现棋盘覆盖图形界面
Jul 17 Python
Python基于network模块制作电影人物关系图
Jun 19 Python
Django框架安装及项目创建过程解析
Sep 14 Python
如何在python中处理配置文件代码实例
Sep 27 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 字符串正则替换函数preg_replace使用说明
2011/07/15 PHP
浅析echo(),print(),print_r(),return之间的区别
2013/11/27 PHP
PHP中执行MYSQL事务解决数据写入不完整等情况
2014/01/07 PHP
php随机取mysql记录方法小结
2014/12/27 PHP
Laravel 5.5 的自定义验证对象/类示例代码详解
2017/08/29 PHP
PHP实现的简单组词算法示例
2018/04/10 PHP
详解Laravel设置多态关系模型别名的方式
2019/10/17 PHP
xmlHTTP实例
2006/10/24 Javascript
jquery中each方法示例和常用选择器
2014/07/08 Javascript
使用JQuery实现的分页插件分享
2015/11/05 Javascript
js实现带三角符的手风琴效果
2017/03/01 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
mpvue微信小程序开发之实现一个弹幕评论
2019/11/24 Javascript
jQuery操作选中select下拉框的值代码实例
2020/02/07 jQuery
Vue 组件注册全解析
2020/12/17 Vue.js
[38:23]2014 DOTA2国际邀请赛中国区预选赛 5 23 CIS VS LGD第一场
2014/05/24 DOTA
pyqt4教程之widget使用示例分享
2014/03/07 Python
Java分治归并排序算法实例详解
2017/12/12 Python
Python实现的tcp端口检测操作示例
2018/07/24 Python
想学python 这5本书籍你必看!
2018/12/11 Python
Python 判断图像是否读取成功的方法
2019/01/26 Python
set在python里的含义和用法
2019/06/24 Python
python中PS 图像调整算法原理之亮度调整
2019/06/28 Python
python 上下文管理器及自定义原理解析
2019/11/19 Python
基于Python获取照片的GPS位置信息
2020/01/20 Python
python3+selenium获取页面加载的所有静态资源文件链接操作
2020/05/04 Python
python 多进程和协程配合使用写入数据
2020/10/30 Python
在vscode中启动conda虚拟环境的思路详解
2020/12/25 Python
科颜氏美国官网:Kiehl’s美国
2017/01/31 全球购物
薇姿法国官网:Vichy法国
2021/01/28 全球购物
华为的Java面试题
2014/03/07 面试题
new修饰符是起什么作用
2015/06/28 面试题
Shell编程面试题
2016/05/29 面试题
网上祭先烈心得体会
2014/09/01 职场文书
2014年个人年终总结
2015/03/09 职场文书
南极大冒险观后感
2015/06/05 职场文书