1.poplib.POP3('这里填入你pop邮件服务器地址') 登陆服务器.
2.poplib.user('用户名 ') poplib.pass_('密码')
3.poplib.stat()方法返回一个元组:(邮件数,邮件尺寸)
mailCount,size=poplib.stat()
这样mailCount就是邮件的数量,size,就是所有邮件的大小.
4.poplib.retr('邮件号码')方法返回一个元组:(状态信息,邮件,邮件尺寸)
hdr,message,octet=server.retr(1) 读去第一个邮件信息.
hdr的内容就是响应信息和邮件大小比如'+OK 12498 octets'
message 是包含邮件所有行的列表.
octet 是这个邮件的内容.
email.message_from_string() 这个方法能把String的邮件转换成email.message实例.
比如我们上面的message,向下面这样调用.
mail=email.message_from_string(string.join(message,'\n'))
这样我们就生成了一个email.Message实例
email.Header.decode_header(mail['subject'])
(解码后的字串,字符编码)
意思为返回一个以“字符编码”编码的“字串”
s_multipart(),这个方法返回boolean值,如果实例包括多段,就返回True,
邮件的格式:邮件的内容都是经过处理后的文本。这些文本可以表示以下信息:
1、邮件头:邮件头携带有发件人(from)、发给谁(to)、邮件主题(subject)、接收日期(date)等信息。
2、邮件body(主体)。body有文本格式和html格式之分,这两种格式的body,可以同时存在,也可以只存在一种。这就是为什么有些邮件既可以用html格式查看,又可以用文本格式查看的原因了。
3、附件(attach)。发送邮件时,可以将本机的文件一起发送。附件可以有0个或多个,只要附件的总大小,不超过邮件服务器所声明的最大容量。
对文本格式的body、html格式的body、附件等内容进行编码时,这些内容之间相互独立存在,之间又没有关系,
编码时就将它们进行分段分别处 理
。我们将每个段文本称为Payload。Payload带有多个参数和内容信息,这些参数用来描述Payload内容的编码格式(Content- Transfer-Encoding)、附件的名称和类型、body的格式类型(Content-Type)等。Payload可以包含0或多个其它的 Payload。反过头来,我们可以认为整个邮件也是一个Payload,邮件头只是它所携带的参数信息而已。
Payload的内容由参数(Content- Transfer-Encoding)来保存编码格式,解码时就按照这个编码格式进行解码即可。那么Payload的参数的编码是如何表示的呢?如邮件头 的from参数值,它其实是将编码格式和内容放在一起如'=?utf-8?Q?UMLChina=E6=9C=8D=E5=8A=A1?= ',前面一部分为编码格式,后面的内容为编码后的文本内容。
如何分辨出此Payload是何种数据呢?
1、分辨附件。如果Payload的参数name,所对应的value不为空时,那么我们可以认为此Payload为附件,value为附件名称。
2、分辨body。如果不为附件,那么根据content-type参数对应的value,当value等于"text/plain"时,我们就认为是文 本格式的body。当value等于"text/html"时,我们就认为时html格式的body。如果这两种都不时,我们就默认它为html格式的 body。
那么我们可以用递归的方法来处理。
1、首先处理邮件的头信息。
2、将邮件当作一个Payload进行处理。
2.1、判断Payload是否还有子Payload,如果有则,递归处理所有子Payload。
2.2 如果Payload没有子Payload,则按照分辨原子Payload的方式处理。
#判断是否还有子Payload
payLoad.is_multipart()
#得到Payload的内容
msgText = payLoad.get_payload()
#得到Payload的子Payload
subPayLoad = payLoad.get_payload()
如果为附件
#得到Payload的Content-type参数、内容传输编码、附件名称
contentTypes = payLoad['Content-Type']
tranEncoding = payLoad['Content-Transfer-Encoding']
attachName = payLoad.get_param("name")
if part.get_filename() == 'abc.txt':
fcontent = part.get_payload(decode = 1)
可以使用mail.walk()得到每个payload