利用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字典实现简单的三级菜单(实例讲解)
Jul 31 Python
Python 基础教程之闭包的使用方法
Sep 29 Python
python实现对指定输入的字符串逆序输出的6种方法
Apr 26 Python
Django处理文件上传File Uploads的实例
May 28 Python
python实现自动登录后台管理系统
Oct 18 Python
python 发送和接收ActiveMQ消息的实例
Jan 30 Python
获取django框架orm query执行的sql语句实现方法分析
Jun 20 Python
python 环境搭建 及python-3.4.4的下载和安装过程
Jul 20 Python
python 字段拆分详解
Dec 17 Python
Django自定义YamlField实现过程解析
Nov 11 Python
Python基于unittest实现测试用例执行
Nov 25 Python
python numpy中setdiff1d的用法说明
Apr 22 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
通过文字传递创建的图形按钮
2006/10/09 PHP
FCKeditor添加自定义按钮
2008/03/27 PHP
浅析PHP编程中10个最常见的错误
2014/08/08 PHP
symfony2.4的twig中date用法分析
2016/03/18 PHP
Yii开启片段缓存的方法
2016/03/28 PHP
php中array_column函数简单实现方法
2016/07/11 PHP
php封装的表单验证类完整实例
2016/10/19 PHP
浅谈PHP发送HTTP请求的几种方式
2017/07/25 PHP
两种方法实现在HTML页面加载完毕后运行某个js
2014/06/16 Javascript
Javascript前端UI框架Kit使用指南之kitjs的对话框组件
2014/11/28 Javascript
Javascript快速排序算法详解
2014/12/03 Javascript
AngularJS仿苹果滑屏删除控件
2016/01/18 Javascript
jQuery的 $.ajax防止重复提交的两种方法(推荐)
2016/10/14 Javascript
JS触摸事件、手势事件详解
2017/05/04 Javascript
深入了解javascript 数组的sort方法
2018/06/01 Javascript
jquery使用FormData实现异步上传文件
2018/10/25 jQuery
React冒泡和阻止冒泡的应用详解
2020/08/18 Javascript
[14:24]Optic Gaming vs PSG LGD BO3
2018/06/07 DOTA
Python数据结构之Array用法实例
2014/10/09 Python
Python实现PS图像明亮度调整效果示例
2018/01/23 Python
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
Python 查找list中的某个元素的所有的下标方法
2018/06/27 Python
pandas 数据结构之Series的使用方法
2019/06/21 Python
python做反被爬保护的方法
2019/07/01 Python
python代码打印100-999之间的回文数示例
2019/11/24 Python
python3 tkinter实现添加图片和文本
2019/11/26 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
使用Canvas操作像素的方法
2018/06/14 HTML / CSS
护理职业应聘自荐书
2013/09/29 职场文书
教师节商场活动方案
2014/02/13 职场文书
初三班主任寄语大全
2014/04/04 职场文书
蟋蟀的住宅教学反思
2014/04/26 职场文书
2014年教师业务工作总结
2014/12/19 职场文书
在Django中使用MQTT的方法
2021/05/10 Python
JavaScript 事件捕获冒泡与捕获详情
2021/11/11 Javascript
python神经网络学习 使用Keras进行回归运算
2022/05/04 Python