Python使用smtp和pop简单收发邮件完整实例
- 更新时间:2022-11-07 09:13:31
- 编辑:连莹华
参考资料
- Python算法交易实战 PDF 电子书 / 91.7 MB / 塞巴斯蒂安·多纳迪奥 推荐度:
- Python深度学习与项目实战 PDF 电子书 / 58 MB / 周北 推荐度:
- Python开发向导/云计算工程师系列 PDF 电子书 / 208.2 MB / 肖睿 推荐度:
正文内容
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学来主要是干什么的
给大家整理一篇关于python的教程,python语言可以用来开发游戏,用于大数据的挖掘和处理,开发web,应用在系统运维,云计算,金融理财分析,人工智能等涉及各行各业的多个领域。
发布时间:2022-06-26
-
Python入门的知识点总结
Python被誉为全世界高效的编程语言,同时也被称作是“胶水语言”,那它为何能如此受欢迎,下面我们就来说说Python入门学习的必备11个知识点,也就是它为何能够如此受欢迎的原因,本文主要
发布时间:2020-05-19
-
python time获取两个时间点的差
在本篇文章里小编给大家整理了关于python time获取两个时间点的差的方法以及实例代码内容了,有需要的朋友们参考下。
发布时间:2019-06-23
-
python实现剪切功能
这篇文章主要为大家详细介绍了一段python代码编写实现的剪切功能,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2019-12-04
-
python flask实现分页效果
这篇文章主要为大家详细介绍了python flask实现分页效果,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
发布时间:2022-04-15
-
python提取具有某种特定字符串的行数据方法
为网友们分享了关于python的教程,今天小编就为大家分享一篇python提取具有某种特定字符串的行数据方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2022-10-27
-
Python中的特殊方法以及应用详解
给网友们整理关于Python的教程,这篇文章主要给大家介绍了关于Python中特殊方法以及应用的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
发布时间:2022-11-03
-
python编程写代码时几个坏习惯总结
这篇文章主要介绍了程序员写Python时的5个坏习惯,你有几条?有的习惯会让 Bug 变得隐蔽难以追踪,当然,也有的并没有错误,只是个人觉得不够优雅。本文有示例代码,感兴趣的朋友跟随小编
发布时间:2019-06-06
-
Python面向对象细节讲解
这篇文章主要介绍了Python面向对象特殊成员的相关资料,需要的朋友可以参考下
发布时间:2020-03-24
-
python里协程使用同步锁Lock的代码分析
今天小编就为大家分享一篇在python里协程使用同步锁Lock的实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
发布时间:2020-01-17