Python使用smtp和pop简单收发邮件完整实例


Posted in Python onJanuary 09, 2018

SMTP

SMTP是发送邮件的协议,Python内置对SMTP的支持,可以发送纯文本邮件、HTML邮件以及带附件的邮件。

Python对SMTP支持有smtplib和email两个模块,email负责构造邮件,smtplib负责发送邮件。

pop

收取邮件就是编写一个MUA作为客户端,从MDA把邮件获取到用户的电脑或者手机上。收取邮件最常用的协议是POP协议,目前版本号是3,俗称POP3。

Python内置一个poplib模块,实现了POP3协议,可以直接用来收邮件。

注意到POP3协议收取的不是一个已经可以阅读的邮件本身,而是邮件的原始文本,这和SMTP协议很像,SMTP发送的也是经过编码后的一大段文本。

要把POP3收取的文本变成可以阅读的邮件,还需要用email模块提供的各种类来解析原始文本,变成可阅读的邮件对象。

所以,收取邮件分两步:

第一步:用poplib把邮件的原始文本下载到本地;

第二部:用email解析原始文本,还原为邮件对象。

email系统组件:

MTA消息传输代理,负责邮件的路由,队列和发送

SMTP简单邮件传输协议

1连接到服务器

2登陆

3发出服务请求

4退出

POP:邮局协议

RFC918"邮局协议的目的是让用户的工作站可以访问到邮箱服务器里的邮件。

邮件要能从工作站通过简单邮件传输协议SMTP发送到邮件服务器"

POP的使用:

1连接到服务器

2登陆

3发出服务请求

4退出

#coding:utf8 
#python2.7 mailtest.py 
''''' 
使用smtp和pop3 协议收发qq邮箱实验 
用户名和密码需要自己填写 
''' 
 
from smtplib import SMTP 
from smtplib import SMTPRecipientsRefused 
from poplib import POP3 
from time import sleep 
import sys 
 
smtpserver = 'smtp.qq.com' 
pop3server = 'pop.qq.com' 
emailaddr = '847915049@qq.com' 
username = 'XXX' 
password = 'XXX' 
 
#组合邮件格式 
origHeaders = ['From: 847915049@qq.com', 
 'To: 847915049@qq.com', 
 'Subject: test msg'] 
origBody = ['nihao ','yaan','sichuan'] 
origMsg = '\r\n\r\n'.join(['\r\n'.join(origHeaders),'\r\n'.join(origBody)]) 
 
#发送邮件部分 
sendSer = SMTP(smtpserver) 
sendSer.set_debuglevel(1) 
print sendSer.ehlo()[0] #服务器属性等 
sendSer.login(username,password) #qq邮箱需要验证 
try: 
 errs = sendSer.sendmail(emailaddr,emailaddr,origMsg) 
except SMTPRecipientsRefused: 
 print 'server refused....' 
 sys.exit(1) 
sendSer.quit() 
assert len(errs) == 0,errs 
 
 
print '\n\n\nsend a mail ....OK!' 
sleep(10) #等待10秒 
print 'Now get the mail .....\n\n\n' 
 
 
 
#开始接收邮件 
revcSer = POP3(pop3server) 
revcSer.user(username) 
revcSer.pass_(password) 
 
rsp,msg,siz = revcSer.retr(revcSer.stat()[0]) 
sep = msg.index('') 
if msg: 
 for i in msg: 
  print i 
revcBody = msg[sep+1:] 
assert origBody == revcBody 
print 'successful get ....'

结果:

send: 'ehlo [169.254.114.107]\r\n' 
reply: '250-smtp.qq.com\r\n' 
reply: '250-PIPELINING\r\n' 
reply: '250-SIZE 52428800\r\n' 
reply: '250-AUTH LOGIN PLAIN\r\n' 
reply: '250-AUTH=LOGIN\r\n' 
reply: '250-MAILCOMPRESS\r\n' 
reply: '250 8BITMIME\r\n' 
reply: retcode (250); Msg: smtp.qq.com 
PIPELINING 
SIZE 52428800 
AUTH LOGIN PLAIN 
AUTH=LOGIN 
MAILCOMPRESS 
8BITMIME 
250 
send: 'AUTH PLAIN ADg0NzkxNTA0OQA0OTMzODQ4MTIzNA==\r\n' 
reply: '235 Authentication successful\r\n' 
reply: retcode (235); Msg: Authentication successful 
send: 'mail FROM:<847915049@qq.com> size=88\r\n' 
reply: '250 Ok\r\n' 
reply: retcode (250); Msg: Ok 
send: 'rcpt TO:<847915049@qq.com>\r\n' 
reply: '250 Ok\r\n' 
reply: retcode (250); Msg: Ok 
send: 'data\r\n' 
reply: '354 End data with <CR><LF>.<CR><LF>\r\n' 
reply: retcode (354); Msg: End data with <CR><LF>.<CR><LF> 
data: (354, 'End data with <CR><LF>.<CR><LF>') 
send: 'From: 847915049@qq.com\r\nTo: 847915049@qq.com\r\nSubject: test msg\r\n\r\nnihao \r\nyaan\r\nsichuan\r\n.\r\n' 
reply: '250 Ok: queued as \r\n' 
reply: retcode (250); Msg: Ok: queued as 
data: (250, 'Ok: queued as') 
send: 'quit\r\n' 
reply: '221 Bye\r\n' 
reply: retcode (221); Msg: Bye 
 
 
 
send a mail ....OK! 
Now get the mail ..... 
 
 
 
Date: Mon, 22 Apr 2013 16:22:01 +0800 
X-QQ-mid: esmtp26t1366618921t440t12695 
Received: from [169.254.114.107] (unknown [120.210.224.173]) 
 by esmtp4.qq.com (ESMTP) with SMTP id 0 
 for <847915049@qq.com>; Mon, 22 Apr 2013 16:22:01 +0800 (CST) 
X-QQ-SSF: B101000000000050321003000000000 
From: 847915049@qq.com 
To: 847915049@qq.com 
Subject: test msg 
 
nihao 
yaan 
sichuan 
successful get ....

总结

以上就是本文关于Python使用smtp和pop简单收发邮件完整实例的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

Python 相关文章推荐
python创建进程fork用法
Jun 04 Python
改进Django中的表单的简单方法
Jul 17 Python
在Django中限制已登录用户的访问的方法
Jul 23 Python
详解python3中tkinter知识点
Jun 21 Python
python实现给微信指定好友定时发送消息
Apr 29 Python
Numpy数组array和矩阵matrix转换方法
Aug 05 Python
pycharm 设置项目的根目录教程
Feb 12 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
Feb 15 Python
python Shapely使用指南详解
Feb 18 Python
django-利用session机制实现唯一登录的例子
Mar 16 Python
如何利用python之wxpy模块玩转微信
Aug 17 Python
python元组打包和解包过程详解
Aug 02 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
Jan 09 #Python
详解python使用Nginx和uWSGI来运行Python应用
Jan 09 #Python
Python numpy实现数组合并实例(vstack,hstack)
Jan 09 #Python
运动检测ViBe算法python实现代码
Jan 09 #Python
python+opencv实现动态物体识别
Jan 09 #Python
Python设计模式之门面模式简单示例
Jan 09 #Python
Python和Java进行DES加密和解密的实例
Jan 09 #Python
You might like
PHP 5昨天隆重推出--PHP 5/Zend Engine 2.0新特性
2006/10/09 PHP
phpMyadmin 用户权限中英对照
2010/04/02 PHP
PHP正则替换函数preg_replace()报错:Notice Use of undefined constant的解决方法分析
2017/02/04 PHP
php删除数组指定元素实现代码
2017/05/03 PHP
laravel框架数据库操作、查询构建器、Eloquent ORM操作实例分析
2019/12/20 PHP
laravel 框架执行流程与原理简单分析
2020/02/01 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
jQuery通用的全局遍历方法$.each()用法实例
2016/07/04 Javascript
用自定义图片代替原生checkbox实现全选,删除以及提交的方法
2016/10/18 Javascript
JavaScript实现类似拉勾网的鼠标移入移出效果
2016/10/27 Javascript
BootStrap轮播HTML代码(推荐)
2016/12/10 Javascript
Vue中render函数的使用方法
2018/01/31 Javascript
js中el表达式的使用和非空判断方法
2018/03/28 Javascript
JS实现可视化文件上传
2018/09/08 Javascript
js实现鼠标拖拽缩放div实例代码
2019/03/25 Javascript
layui 表单标签的校验方法
2019/09/04 Javascript
jsonp格式前端发送和后台接受写法的代码详解
2019/11/07 Javascript
Javascript实现鼠标点击冒泡特效
2019/12/24 Javascript
jquery实现图片无缝滚动 蒙版遮蔽效果
2020/01/11 jQuery
python基于BeautifulSoup实现抓取网页指定内容的方法
2015/07/09 Python
Python中列表和元组的相关语句和方法讲解
2015/08/20 Python
浅谈Python类的__getitem__和__setitem__特殊方法
2016/12/25 Python
利用python将pdf输出为txt的实例讲解
2018/04/23 Python
Python判断中文字符串是否相等的实例
2018/07/06 Python
python实现彩色图转换成灰度图
2019/01/15 Python
python3.6下Numpy库下载与安装图文教程
2019/04/02 Python
django项目用higcharts统计最近七天文章点击量
2019/08/17 Python
python模拟点击网页按钮实现方法
2020/02/25 Python
Python模拟登入的N种方式(建议收藏)
2020/05/31 Python
Python filter()及reduce()函数使用方法解析
2020/09/05 Python
美国电子产品折扣网站:Daily Steals
2017/05/20 全球购物
魅力教师事迹材料
2014/01/10 职场文书
开学典礼演讲稿
2014/05/23 职场文书
活动总结新闻稿
2014/08/30 职场文书
欢送领导祝酒词
2015/08/12 职场文书
CentOS 7安装mysql5.7使用XtraBackUp备份工具命令详解
2022/04/12 MySQL