利用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中集合类型(set)学习小结
Jan 28 Python
Python中将字典转换为XML以及相关的命名空间解析
Oct 15 Python
Python中常用操作字符串的函数与方法总结
Feb 04 Python
Python 2与Python 3版本和编码的对比
Feb 14 Python
python 巧用正则寻找字符串中的特定字符的位置方法
May 02 Python
python筛选出两个文件中重复行的方法
May 31 Python
对python中矩阵相加函数sum()的使用详解
Jan 28 Python
在Python 中同一个类两个函数间变量的调用方法
Jan 31 Python
Python实现Linux监控的方法
May 16 Python
Python3基本输入与输出操作实例分析
Feb 14 Python
Python paramiko 模块浅谈与SSH主要功能模拟解析
Feb 29 Python
Django调用支付宝接口代码实例详解
Apr 04 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_unique之后json_encode需要注意
2011/01/02 PHP
PHP中抽象类、接口的区别与选择分析
2016/03/29 PHP
Thinkphp3.2.3分页使用实例解析
2016/07/28 PHP
PHP redis实现超迷你全文检索
2017/03/04 PHP
PHP高精确度运算BC函数库实例详解
2017/08/15 PHP
利用php + Laravel如何实现部署自动化详解
2017/10/11 PHP
PHP基于curl实现模拟微信浏览器打开微信链接的方法示例
2019/02/15 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
2019/12/12 PHP
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
jquery实现更改表格行顺序示例
2014/04/30 Javascript
深入浅析JavaScript中的Function类型
2016/07/09 Javascript
AngularJS基础 ng-if 指令用法
2016/08/01 Javascript
Vue.js划分组件的方法
2017/10/29 Javascript
对vue下点击事件传参和不传参的区别详解
2018/09/15 Javascript
vuejs+element UI点击编辑表格某一行时获取内容填入表单的示例
2018/10/31 Javascript
vue-cli 构建骨架屏的方法示例
2018/11/08 Javascript
vue-cli3.0如何使用CDN区分开发、生产、预发布环境
2018/11/22 Javascript
Python实现简易Web爬虫详解
2018/01/03 Python
PyQt5 QSerialPort子线程操作的实现
2018/04/21 Python
python下解压缩zip文件并删除文件的实例
2018/04/24 Python
python模块之subprocess模块级方法的使用
2019/03/26 Python
使用 Python 玩转 GitHub 的贡献板(推荐)
2019/04/04 Python
python ChainMap 合并字典的实现步骤
2019/06/11 Python
Python基于wordcloud及jieba实现中国地图词云图
2020/06/09 Python
python设置中文界面实例方法
2020/10/27 Python
香奈儿美国官网:CHANEL美国
2020/05/20 全球购物
岗位职责的含义
2013/11/17 职场文书
银行员工辞职信范文
2014/01/20 职场文书
信息专业学生学习的自我评价
2014/02/17 职场文书
家庭教育的心得体会
2014/09/01 职场文书
工程承包协议书范本
2014/09/29 职场文书
汤姆叔叔的小屋读书笔记
2015/06/30 职场文书
小学英语教学随笔
2015/08/14 职场文书
教师廉政准则心得体会
2016/01/20 职场文书
导游词之丹东鸭绿江
2019/10/24 职场文书
Win11任务栏太宽了怎么办?一招解决Win11任务栏太宽问题
2021/11/21 数码科技