Python邮箱客户端编写之接收邮件操作
Python的POP3类有很多方法来管理邮箱。
首先需要导入poplib库,import poplib
POP3(server) 连接到邮箱服务器
user(username)将用户名发送至服务器,等候服务器的正在等候用户密码的返回信息
pass_(password)将密码发送至服务器,进行登录。如果登录失败,会引发异常。
stat() 返回长度为2的元组:分别表示邮箱中邮件的数量、邮件消息的总大小(字节数)。
list() 返回长度为3的元组,分别表示服务器的返回信息、消息列表、返回信息的大小。
retr(messagenumber)返回长度为3的元组,分别表示服务器的返回信息、指定标号邮件的所有行、邮件消息的大小(字节数)。
quit() 结束连接并退出。
但是通过retr()方法得到的邮件的所有行消息是没有进行解码的。我们需要采用Python提供的email库来将消息转化为email的实例,从而通过email的方法对邮件进行处理。
email.message_from_string()这个方法可以将string的邮件内容转换成email.message实例。然后通过其他方法将邮件内容(发件人、发件时间、主题、正文等)提取出来。
将相关信息提取出来以后,可以通过cPickle.dump()方法将信息存入磁盘文件中。
实例代码如下:
import poplib
import email
import email.header
import email.utils
import cPickle server = "server_name"
user = "login_name"
password = "password"
server = poplib.POP3(server)
server.user(user)
server.pass_(password)
mailfrom = []
ret = server.list() #获得邮件列表
mailcount = len(ret[1]) #获得邮件列表长度
for num in range(1,mailcount):
rsp,msglines,msgsize = server.retr(num) #获取邮件内容
mail = email.message_from_string(string.join(msglines,'\n')) #转化为email.message实例
subject = email.Header.decode_header(mail['subject'])[0][0] #获取邮件主题内容
mail_from = email.utils.parseaddr(mail['From'])[1] #获取发件人邮箱
mail_time = email.Header.decode_header(mail['Date'])[0][0] #获取发件时间
mail_object = DownMessage(mail) #获取邮件正文
fp = file('mail.txt', 'w')
cPickle.dump(mail_from, fp) #将获取的信息存入磁盘文件
cPickle.dump(mail_time, fp)
cPickle.dump(subject, fp)
cPickle.dump(mail_object, fp)
fp.close()
server.quit()
#对邮件正文进行解码处理
def DownMessage(self,mail):
if mail.is_multipart():
for part in mail.get_payload():
self.DownMessage(part,filename)
else:
types = mail.get_content_type()
charset = mail.get_content_charset()
if types == 'text/plain' or types == 'text/html':
try:
if charset == 'utf_8':
mailobject = unicode(mail.get_payload(decode=True),charset)
elif charset == None:
mailobject = mail.get_payload(decode=True)
else:
mailobject = mail.get_payload(decode=charset).decode(charset)
except:
print 'BLANK'
elif types == 'text/base64':
try:
mailobject = unicode(base64.decodestring(mail.get_payload(),charset))
except:
print 'BLANK'
return mailobject
Python邮箱客户端编写之接收邮件操作的更多相关文章
- 设置Office 365邮箱默认发送和接收邮件大小限制
Office 365默认的 35MB 的邮件大小限制.Office 365 最大是支持 150MB 的邮件体积的. 我们只需用 Windows Powershell 连接 Office 365 ,然后 ...
- javaWeb之邮箱发送(邮箱客户端配置)
这里使用的是本机的邮箱服务器 , 代码执行条件: 1.·邮箱服务器 , 下载地址 密码 s4xn 邮箱服务器配置: 1):安装 2):打开服务器 红色部分是默认账号,不用处理 3)系统设置 ...
- 使用python发送和接收邮件
关于电子邮件 大学之前,基本不用邮箱,所以基本感觉不到它的存在,也不知道有什么用:然而大学之后,随着认识的人越来越多,知识越来越广泛,邮箱已然成为很重要的通讯工具,大学一些课程作业需要有邮箱发给老师, ...
- Python 用IMAP接收邮件
一.简介IMAP(Internet Message Access Protocol),这个协议与POP一样,也是从邮件服务器上下载邮件到本机,不过IMAP比POP的功能要更加强大些,IMAP除支持PO ...
- Python网络编程——编写一个简单的回显客户端/服务器应用
今天将python中socket模块的基本API学习完后,照着书上的实例编写一个套接字服务器和客户端.采用python3.5版本,在注释中会标明python2和python3的不同之处. 1.代码 ( ...
- Python 用POP接收邮件
一.简介 POP(Post Office Protocal)最长用的POP版本是POP3,因此本文是以POP3为主.POP3非常简单,可以用来从邮件服务器上下载邮件,然后删除这些邮件.功能非常有限,后 ...
- YoMail 邮箱客户端的社会化之路,起于邮箱,不止于邮件
你还记不记得上一次用邮箱处理私人事务是什么时候?从什么时候开始邮箱于你而言,唯一功能沦为了收取各种网站的验证信息? 电子邮件实际上非常适合于工作上使用,比起其他通信工具,或者社会化媒体,电子邮件在工作 ...
- python接收邮件
# -*- coding: utf-8 -*- import poplib import email from email.parser import Parser from email.header ...
- 邮件收取客户端LumiSoft类库接收yahoo邮件的问题。
//开始循环取邮件数据 m_pImap.Fetch( false, IMAP_t_SeqSet.Parse("1:*"), new IMAP_t_Fetch_i[]{ new IM ...
随机推荐
- Asp.net MVC 视图之公用代码
一.公共模板 转自:http://www.cnblogs.com/kissdodog/archive/2013/01/07/2848881.html 1.@RenderBody() 在网站公用部分通过 ...
- 【形式化方法:VDM++系列】1.前言
1.前言 今天开始上课学习软件需求分析与VDM++,经过一节课的学习,我又增长了见识. 软件需求工程在软件工程中处于十分核心的地位:需求分析的好坏直接决定软件工程的成败.这一点是我之前对需求工程的理解 ...
- 目标识别:Bag-of-words表示图像
BOW (bag of words) 模型简介 Bag of words模型最初被用在文本分类中,将文档表示成特征矢量.它的基本思想是假定对于一个文本,忽略其词序和语法.句法,仅仅将其看做是一些词汇的 ...
- get started with laravel
Browsing the API (http://laravel.com/api) can be somewhat intimidating at first.But it is often the ...
- 关于mIdleHandlers 空闲消息
模拟情况说明 创建一个handler对象 该handler持有的是主线程 1.先发送一个延时20秒的message what=35;2.紧接着又发送一个延时10秒的Runnable3.在该Runnab ...
- tlplayer for wince 版本正式商用
开始的时候tlplayer遇到一些问题,后来经过一些简单优化后,可以满足商用条件. 支持http,mms,rtsp等网络协议,支持内存流播放.需要定制或者需要支持hls,rtmp,m3u8等协议的,请 ...
- poj2286The Rotation Game(迭代加深dfs)
链接 把迭代加深理解错了 自己写了半天也没写对 所谓迭代加深,就是在深度无上限的情况下,先预估一个深度(尽量小)进行搜索,如果没有找到解,再逐步放大深度搜索.这种方法虽然会导致重复的遍历 某些结点,但 ...
- poj3140Contestants Division
链接 这叫树形DP吗..?断开某条边 求剩下两颗树数权值和的差最小 dfs一遍 枚举边 查了n久 wa n次 dp数组没初始化.. 在poj上1A感觉应该挺爽 #include <iostre ...
- 函数lock_rec_find_similar_on_page
/*********************************************************************//** Looks for a suitable type ...
- lightoj 1012
水题,dfs #include<cstdio> #include<string> #include<cstring> #include<iostream> ...