利用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 数据加密代码
Dec 24 Python
在Django的模型中添加自定义方法的示例
Jul 21 Python
Python实现批量检测HTTP服务的状态
Oct 27 Python
python3+PyQt5自定义视图详解
Apr 24 Python
Python 通配符删除文件的实例
Apr 24 Python
解决Spyder中图片显示太小的问题
Apr 27 Python
Django rest framework工具包简单用法示例
Jul 20 Python
python 判断linux进程,并杀死进程的实现方法
Jul 01 Python
Pytorch 使用opnecv读入图像由HWC转为BCHW格式方式
Jun 02 Python
Python计算信息熵实例
Jun 18 Python
有关pycharm登录github时有的时候会报错connection reset的问题
Sep 15 Python
Python制作运行进度条的实现效果(代码运行不无聊)
Feb 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下载大文件失败并限制下载速度的实例代码
2019/05/10 PHP
PHP isset empty函数相关面试题及解析
2020/12/11 PHP
Javascript学习笔记1 数据类型
2010/01/11 Javascript
javascript控制在光标位置插入文字适合表情的插入
2014/06/09 Javascript
返回顶部按钮响应滚动且动态显示与隐藏
2014/10/14 Javascript
node.js中的console.timeEnd方法使用说明
2014/12/09 Javascript
asp.net+js实现金额格式化
2015/02/27 Javascript
20分钟轻松创建自己的Bootstrap站点
2016/05/12 Javascript
JS判断输入字符串长度实例代码(汉字算两个字符,字母数字算一个)
2016/08/02 Javascript
理解Angular的providers给Http添加默认headers
2017/07/04 Javascript
vue-cli3 DllPlugin 提取公用库的方法
2019/04/24 Javascript
在 Vue 应用中使用 Netlify 表单功能的方法详解
2019/06/03 Javascript
webgl实现物体描边效果的方法介绍
2019/11/27 Javascript
Vue 图片压缩并上传至服务器功能
2020/01/15 Javascript
[01:00:44]DOTA2上海特级锦标赛主赛事日 - 3 败者组第三轮#1COL VS Alliance第三局
2016/03/04 DOTA
Python实现的多线程http压力测试代码
2017/02/08 Python
Python中Django 后台自定义表单控件
2017/03/28 Python
python 计算数组中每个数字出现多少次--“Bucket”桶的思想
2017/12/19 Python
Python3.5 处理文本txt,删除不需要的行方法
2018/12/10 Python
python实现淘宝秒杀脚本
2020/06/23 Python
pycharm创建scrapy项目教程及遇到的坑解析
2019/08/15 Python
Python利用逻辑回归模型解决MNIST手写数字识别问题详解
2020/01/14 Python
浅析pandas随机排列与随机抽样
2021/01/22 Python
四川internet信息高速公路(C#)笔试题
2012/02/29 面试题
自动化工程专业个人应聘自荐信
2013/09/26 职场文书
中考冲刺决心书
2014/03/11 职场文书
加多宝凉茶广告词
2014/03/18 职场文书
对党的十八届四中全会的期盼
2014/10/17 职场文书
高中社区服务活动报告
2015/02/05 职场文书
《抽屉原理》教学反思
2016/02/20 职场文书
升职感谢领导的话语及升职感谢信
2019/06/24 职场文书
小学语文的各类谚语(70首)
2019/08/15 职场文书
60句有关成长的名言
2019/09/04 职场文书
JS监听Esc 键触发事键
2021/04/14 Javascript
Python实现学生管理系统(面向对象版)
2021/06/24 Python
Python 全局空间和局部空间
2022/04/06 Python