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写的windows服务不能启动的问题
Apr 15 Python
python多线程编程中的join函数使用心得
Sep 02 Python
Python实现从百度API获取天气的方法
Mar 11 Python
Python多线程编程(二):启动线程的两种方法
Apr 05 Python
在Django的上下文中设置变量的方法
Jul 20 Python
Python subprocess模块功能与常见用法实例详解
Jun 28 Python
Sanic框架安装与简单入门示例
Jul 16 Python
selenium2.0中常用的python函数汇总
Aug 05 Python
python opencv实现信用卡的数字识别
Jan 12 Python
python3.8下载及安装步骤详解
Jan 15 Python
为什么称python为胶水语言
Jun 16 Python
python图片验证码识别最新模块muggle_ocr的示例代码
Jul 03 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
这东西价格,可以买几台TECSUN S-2000
2021/03/02 无线电
thinkphp实现面包屑导航(当前位置)例子分享
2014/05/10 PHP
js 无提示关闭浏览器页面的代码
2010/03/09 Javascript
使用JS取得焦点(focus)元素代码
2014/03/22 Javascript
DOM 高级编程
2015/05/06 Javascript
JS实现转动随机数抽奖特效代码
2020/04/16 Javascript
AngularJS中的包含详细介绍及实现示例
2016/07/28 Javascript
轻松掌握JavaScript装饰者模式
2016/08/27 Javascript
AngularJS中一般函数参数传递用法分析
2016/11/22 Javascript
Mobile Web开发基础之四--处理手机设备的横竖屏问题
2017/08/11 Javascript
JavaScript实现旋转轮播图
2020/08/18 Javascript
React Native 通告消息竖向轮播组件的封装
2020/08/25 Javascript
微信小程序页面间跳转传参方式总结
2019/06/13 Javascript
非常实用的jQuery代码段集锦【检测浏览器、滚动、复制、淡入淡出等】
2019/08/08 jQuery
vue 强制组件重新渲染(重置)的两种方案
2019/10/29 Javascript
ES6中Set和Map用法实例详解
2020/03/02 Javascript
讲解python参数和作用域的使用
2013/11/01 Python
python访问sqlserver示例
2014/02/10 Python
python轻松查到删除自己的微信好友
2016/01/10 Python
TensorFlow如何实现反向传播
2018/02/06 Python
Python列表推导式、字典推导式与集合推导式用法实例分析
2018/02/07 Python
Python3实现购物车功能
2018/04/18 Python
python实现自动网页截图并裁剪图片
2018/07/30 Python
Python GUI编程 文本弹窗的实例
2019/06/11 Python
使用python画社交网络图实例代码
2019/07/10 Python
python的slice notation的特殊用法详解
2019/12/27 Python
Python爬虫获取豆瓣电影并写入excel
2020/07/31 Python
Python pip使用超时问题解决方案
2020/08/03 Python
Sephora丝芙兰马来西亚官方网站:国际化妆品购物
2018/03/15 全球购物
嘻哈珠宝品牌:KRKC&CO
2020/10/19 全球购物
博士毕业生自我鉴定范文
2014/04/13 职场文书
团日活动总结怎么写
2014/06/25 职场文书
超市创业计划书
2014/09/15 职场文书
python3 删除所有自定义变量的操作
2021/04/08 Python
Python深度学习之Pytorch初步使用
2021/05/20 Python
MySQL学习必备条件查询数据
2022/03/25 MySQL