python接收邮件
# -*- coding: utf-8 -*- import poplib import email from email.parser import Parser from email.header import decode_header from email.utils import parseaddr import time def guess_charset(msg): # 先从msg对象获取编码: charset = msg.get_charset() if charset is None: # 如果获取不到,再从Content-Type字段获取: content_type = msg.get('Content-Type', '').lower() pos = content_type.find('charset=') if pos >= 0: charset = content_type[pos + 8:].strip() return charset #邮件的Subject或者Email中包含的名字都是经过编码后的str,要正常显示,就必须decode: def decode_str(s): value, charset = decode_header(s)[0] if charset: value = value.decode(charset) return value # indent用于缩进显示: RESULT = '' def mail_info(msg,indent=0): global RESULT if indent == 0: # 邮件的From, To, Subject存在于根对象上: for header in ['From', 'To', 'Subject']: value = msg.get(header, '') if value: if header=='Subject': # 需要解码Subject字符串: value = decode_str(value) else: # 需要解码Email地址: hdr, addr = parseaddr(value) name = decode_str(hdr) value = u'%s <%s>' % (name, addr) # print('%s%s: %s' % (' ' * indent, header, value)) RESULT += ('%s%s: %s' % (' ' * indent, header, value)) RESULT += '\r\n' if (msg.is_multipart()): # 如果邮件对象是一个MIMEMultipart, # get_payload()返回list,包含所有的子对象: parts = msg.get_payload() for n, part in enumerate(parts): # print('%spart %s' % (' ' * indent, n)) # print('%s--------------------' % (' ' * indent)) # 递归打印每一个子对象: mail_info(part,indent + 1) else: # 邮件对象不是一个MIMEMultipart, # 就根据content_type判断: content_type = msg.get_content_type() if content_type=='text/plain' or content_type=='text/html': # 纯文本或HTML内容: content = msg.get_payload(decode=True) # 要检测文本编码: charset = guess_charset(msg) if charset: try: content = content.decode(charset) except: content = content.decode('utf-8', errors='ignore').encode('utf-8') # print('%sText: %s' % ('' * indent, content + '...')) RESULT += ('%sText: %s' % ('' * indent, content)) else: # 不是文本,作为附件处理: # print('%sAttachment: %s' % (' ' * indent, content_type)) RESULT += ('%sAttachment: %s' % (' ' * indent, content_type)) return RESULT def judge_mail(content,condition): res = True for l in range(0,len(condition)): if condition[l] not in content: res = False break return res #接收邮件:邮箱、密码、域名、邮件数量 def receive_mail(email,password,pop3_server,num): res = '' server = poplib.POP3(pop3_server) #server.set_debuglevel(1) # print(server.getwelcome()) # 认证: server.user(email) server.pass_(password) # print('Messages: %s. Size: %s' % server.stat()) resp, mails, octets = server.list() for i in range(0,num): # 获取最新一封邮件, 注意索引号从1开始: resp, lines, octets = server.retr(len(mails) - i) # 解析邮件: msg_content = b'\r\n'.join(lines).decode('utf-8') msg = Parser().parsestr(msg_content) res += mail_info(msg) # 关闭连接: # server.quit() return res #删除邮件 def delete_mail(email,password,pop3_server): server = poplib.POP3(pop3_server) #server.set_debuglevel(1) # print(server.getwelcome()) # 认证: server.user(email) server.pass_(password) # print('Messages: %s. Size: %s' % server.stat()) resp, mails, octets = server.list() # 慎重:将直接从服务器删除邮件: server.dele(len(mails)) # 关闭连接: server.quit() return True if __name__ == '__main__': email = 'jiangyf@wondershare.cn' password = ' pop3_server = 'imap.wondershare.cn' print(receive_mail(email,password,pop3_server,2)) # condition = ['Thank you for shopping with us www.wondershare.com1.','2.PID'] # #循环检查三次邮件 # for i in range(3): # result = receive_mail(email,password,pop3_server,2) # res = judge_mail(result,condition) # if res == True: # print(res) # break # else: # print('第' + str(i) + '次轮循') # time.sleep(30) # print(delete_mail(email,password,pop3_server))
python接收邮件的更多相关文章
- Python接收邮件并保存至MySQL
转自:http://www.360doc.com/content/14/0103/13/11789990_342303735.shtml 参考了一些网络上的资料,做了个简单程序,使用python接收邮 ...
- 使用python发送和接收邮件
关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用:然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师, ...
- Python 用IMAP接收邮件
一.简介IMAP(Internet Message Access Protocol),这个协议与POP一样,也是从邮件服务器上下载邮件到本机,不过IMAP比POP的功能要更加强大些,IMAP除支持PO ...
- python SMTP邮件发送(转载)
Python SMTP发送邮件 SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. py ...
- Python收发邮件
发送邮件使用SMTP协议,接受POP3或IMAP: 创建邮件内容email模块,发送邮件smtplib模块.发送邮件比较简单,只需先创建SMTP对象,登录服务器后根据发收邮箱地址发送即可: POP3接 ...
- python smtp邮件
SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议,它是一组用于由源地址到目的地址传送邮件的规则,由它来控制信件的中转方式. python的smtplib提供了一 ...
- 转--python -- 收发邮件
官方 import smtplib from email.mime.text import MIMEText from email.header import Header # 发送邮箱服务器 smt ...
- python QQ邮件发送邮件
# -*- coding: UTF-8 -*- import smtplib from email.mime.text import MIMEText from email.header import ...
- 用Python实现邮件发送Hive明细数据
代码地址如下:http://www.demodashi.com/demo/12673.html 一.需求描述 客户需要每周周一接收特定的活动数据,生成Excel或是CSV文件,并通过邮件发送给指定接收 ...
随机推荐
- 解释局域(LAN)和广域网(WAN)之间的区别,它们之间的关系是什么?
解释局域(LAN)和广域网(WAN)之间的区别,它们之间的关系是什么?
- 存在Settings数据在手机系统中的位置
旧版本Android,将settings数据存在数据库中,{system, secure, global} 对应的是 /data/data/com.android.providers.settings ...
- Css - 三大特性
css - 三大特性 1.层叠性 如果通过两个相同选择器设置了同一个元素的某个相同的css属性,按照css相同属性的出现顺序,后面的样式会覆盖前面的样式 2.继承性 祖先元素的关于文本的样式会遗传给后 ...
- 【NLP CS224N笔记】汇总
[NLP CS224N笔记]Lecture 1 - Introduction of NLP [NLP CS224N笔记]Lecture 2 - Word Vector Representations: ...
- python小练习,密码等级问题
. # 密码安全性检查代码 . # . # 低级密码要求: . # . 密码由单纯的数字或字母组成 . # . 密码长度小于等于8位 . # . # 中级密码要求: . # . 密码必须由数字.字母或 ...
- Vue -自定义指令&钩子函数
除了核心功能默认内置的指令,Vue也允许注册自定义指令 页面加载后,让文本框自动获取焦点,原生js做法是获取文本框元素后调用focus()方法,但Vue不建议手动操作DOM元素,所以此时要自定义指令 ...
- applet jre冲突问题
erp中用到applet,jre为1.6,开发用到jdk1.8,有冲突 安装jre1.6,再安装jdk8,将jdk1.8文件夹复制后卸载1.8,然后重新黏贴,将javahome定向到1.8文件夹
- MySQL的information_schema
在一次清空一张比较大的表时(在清空前占用400多兆),发现该表中记录为0条但是空间并没有被释放,采用下面方式可查看占用情况 -- 查询各个数据库占用磁盘的情况 ,),' MB') as data_si ...
- LA 4108 (线段树)
区间更新 + 统计更新长度 稍稍不注意就T了 #include<bits/stdc++.h> #define lson l, m, rt<<1 #define rson m+1 ...
- 解决ftp客户端连接验证报错Server sent passive reply with unroutable address. Using server address instead
最近在linux服务器安装vsftp服务.经过一轮设置,终于可以连接上了,用winSCP连接,刷新目录就提示这个错误. 解决办法: vim /etc/vsftpd.conf ,编辑配置文件,最后加上 ...