利用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双向链表实现实例代码
Nov 21 Python
Python数据分析中Groupby用法之通过字典或Series进行分组的实例
Dec 08 Python
Python实现两个list求交集,并集,差集的方法示例
Aug 02 Python
记录Python脚本的运行日志的方法
Jun 05 Python
Python 使用PyQt5 完成选择文件或目录的对话框方法
Jun 27 Python
Python中一个for循环循环多个变量的示例
Jul 16 Python
在django view中给form传入参数的例子
Jul 19 Python
Python+numpy实现矩阵的行列扩展方式
Nov 29 Python
pytorch 模型的train模式与eval模式实例
Feb 20 Python
opencv 图像滤波(均值,方框,高斯,中值)
Jul 08 Python
Python三维绘图之Matplotlib库的使用方法
Sep 20 Python
Pytest中skip skipif跳过用例详解
Jun 30 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 error_log()将错误信息写入一个文件(定义和用法)
2013/10/25 PHP
php自定义函数实现二维数组按指定key排序的方法
2016/09/29 PHP
Yii2 中实现单点登录的方法
2018/03/09 PHP
在laravel-admin中列表中禁止某行编辑、删除的方法
2019/10/03 PHP
JS去掉第一个字符和最后一个字符的实现代码
2014/02/20 Javascript
Bootstrap 源代码分析(未完待续)
2016/08/17 Javascript
JS组件系列之Gojs组件 前端图形化插件之利器
2017/11/29 Javascript
基于Node.js的大文件分片上传示例
2019/06/19 Javascript
微信小程序实现手势滑动卡片效果
2019/08/26 Javascript
python映射列表实例分析
2015/01/26 Python
Python解析xml中dom元素的方法
2015/03/12 Python
在Django的视图(View)外使用Session的方法
2015/07/23 Python
解决Python传递中文参数的问题
2015/08/04 Python
Python中的with语句与上下文管理器学习总结
2016/06/28 Python
Python3实现简单可学习的手写体识别(实例讲解)
2017/10/21 Python
django自带的server 让外网主机访问方法
2018/05/14 Python
对Python中DataFrame选择某列值为XX的行实例详解
2019/01/29 Python
Python 中 -m 的典型用法、原理解析与发展演变
2019/11/11 Python
python 实现二维列表转置
2019/12/02 Python
tensorflow 2.0模式下训练的模型转成 tf1.x 版本的pb模型实例
2020/06/22 Python
如何用python免费看美剧
2020/08/11 Python
Django-simple-captcha验证码包使用方法详解
2020/11/28 Python
Python中的流程控制详解
2021/02/18 Python
Html5实现单张、多张图片上传功能
2019/04/28 HTML / CSS
英国广泛的照明产品网站:Lights4living
2018/01/28 全球购物
英国网上电器商店:Electricshop
2020/03/15 全球购物
园长自我鉴定
2013/10/06 职场文书
学校介绍信范文
2014/01/14 职场文书
银行工作检查书范文
2014/01/31 职场文书
保密承诺书范文
2014/03/27 职场文书
学习焦裕禄观后感
2015/06/09 职场文书
《窃读记》教学反思
2016/02/18 职场文书
Nginx下配置Https证书详细过程
2021/04/01 Servers
MYSQL主从数据库同步备份配置的方法
2021/05/26 MySQL
Python 数据可视化之Matplotlib详解
2021/11/02 Python
微信小程序结合ThinkPHP5授权登陆后获取手机号
2021/11/23 PHP