符合中小企业对网站设计、功能常规化式的企业展示型网站建设
本套餐主要针对企业品牌型网站、中高端设计、前端互动体验...
商城网站建设因基本功能的需求不同费用上面也有很大的差别...
手机微信网站开发、微信官网、微信商城网站...
由上篇文章我们已经得知邮件从发送到接收的过程:
为凤县等地区用户提供了全套网页设计制作服务,及凤县网站建设行业解决方案。主营业务为网站设计制作、网站制作、凤县网站设计,以传统方式定制建设网站,并提供域名空间备案等一条龙服务,秉承以专业、用心的态度为用户提供真诚的服务。我们深信只要达到每一位用户的要求,就会得到认可,从而选择与我们长期合作。这样,我们也可以走得更远!
发件人-MUA-MTA-若干MTA-MDA-MUA-收件人
本节接收邮件主要就是编写一个 MUA 客户端,从 MDA 将邮件取回本地。
收取邮件最常用的是 POP协议 ,目前版本是第三版,也称 POP3 。python内置了 poplib 模块,支持POP3协议。
回想上一节 SMTP ,我们对要发送的邮件内容进行了各种编码,包括添加MIME header,编码之后再进行发送。
因此,我们通过POP3协议接收的也不是原内容,而是经过一系列编码等处理的文本。
所以,要想把POP3收取的文本变为可阅读的邮件对象,就需要利用 email 模块对原始邮件进行解析。
所以,邮件收取的流程就是:
由上一篇 文章 最后总结部分可知。邮件由字符到发送到网络经历了如下的格式转化:
纯文本:
str-bytes-base64-str-bytes
二进制文件:
binary code-base64-str-bytes
我们解析邮件也是按这个思路,逆序解析出内容。
这里的 decode('utf-8') 先把字节流转化为字符串,再将字符串转化为 message 结构的对象。这步与发送邮件的 as_string 函数相反。
先从上一节结构化的 msg 中取出信件头,打印出来。
如果是 multipart 结构, get_payload 函数会返回一个包含不同part的list,然后对每一part递归调用 print_info ,打印子信件头和子信件内容。
不是 multipart 时,之后再依据 Content-Type 作不同处理:
如果是 text :
利用 get_payload(decode = Ture) 取出子信件的内容, decode 为True,则按照 Content-Transfer-Type 将 base64 或 QP 解码为 bytes 。
再 guess_charset 猜出编码方式,之后将其解码为字符显示。
如果不是 Text 对象,则为附件:
打印出附件的 Content-Type 。
a = [1, 2, 3, 4]
b = a.pop(1) # 得到pop函数的返回值:b=1
a.pop(1) # 这样也是可以的,我们可以选择忽略pop函数的返回值
del(a[1]) # 这时a里只剩下一个元素
而这样则是非法的:
1
2
a = [1, 2, 3]
b = del(a[1]) # 因为del函数不能有返回值
所以,如果忽略掉可否有返回值这一点,这两个用法是等效的。
python中你可以使用list模拟栈数据结构,list自带pop函数,默认为获取最后一个元素,但是可以通过指定索引值pop(i),获取指定位置的元素。
如果元素索引错误,抛出IndexError异常。
def pop(a):
if a and isinstance(a, list):
c = a[-1]
del a[-1]
return c
else:
return ""
if __name__ == "__main__":
a = [1,2,3,4,5]
print a
pop(a)
print a