第三部分 E-mail服务
第9章 E-mail的编写和编码
1. Header
header不影响邮件的实际发送行为,而且可以被伪造。实际的发送信息由SMTP携带。header的作用在于帮助邮件程序,例如From 在回复的时候可以使用。
2. 撰写传统的邮件
trad_gen_newhdrs.py介绍了使用email模块的MIMEText来生成一封email以及添加header的过程。
3. 解析传统的邮件
trad_parse.py对一封传统邮件进行解析。打印出headers与内容。
date_parse.py则解析一封邮件的日期。
4. 理解MIME
Multipurpose Internet Mail Extensions,MIME是向后兼容的,它支持不同的传输编码。MIME提供内容类型,例如text/plain。MIME内容类型也应用在其它协议中,例如HTTP。
对于一个部分的邮件,MIME只是加上几个headers来说明内容类型和字符集。对于多部分邮件则放置特殊标记来区分多个段,每一部分可以含有自己的headers。为了照顾不支持MIME的程序,通常将最基本的内容放在前面。
5. 添加MIME附件
mime_gen_basic.py展示了如何给邮件添加附件。邮件使用MIMEMultipart()建立,先添加文本部分,使用MIMEText(),最后再逐一添加附件。
6. 添加MIME替换方法
mime_gen_alt.py使用MIMEMultipart(‘alternative’) 来建立一个可以替换内容的邮件,邮件有纯文本版本和HTML版本。
7. 构建非英语Header
mime_headers.py使用了一个非ASCII的header。
from email.Header import Header
fromhdr = Header("Michael M/xfcller", 'iso-8859-1')
8. 组成嵌套的多部分
mime_gen_both.py,又用了alternative,又添加了附件。
9. 解析MIME邮件
mime_structure.py遍历邮件树,显示邮件的结构、header。
mime_decode.py对指定的部分(附件)进行解码。
mime_parse_headers.py对header进行解码。主要是针对非ASCII编码的header。
第10章 SMTP
本地没有smtp库,所以没仔细看。
1. SMTP库简介
simple.py向指定邮箱发送一封邮件。
2. 错误处理和会话调试
debug.py中,使用s.set_debuglevel(1)对与SMTP服务器的整个会话过程显示出来。
3. 从EHLO中得到信息
ehlo.py使用s.ehlo()来从服务器获得信息。
4. 使用SSL和TLS
tls.py使用tls来向发送邮件。
5. 认证
login.py使用s.login(username, password)登录到SMTP服务器。
第11章 POP
POP(The Post Office Protocol),
popconn.py登录到远程POP服务器。输出邮件数量和总大小。
apop.py使用apop认证登录。
mailbox.py使用list()方法返回邮件及其大小。
download.py下载邮件。
download-and-delete.py下载并且删除邮件。
第12章 IMAP
IMAP(INTERNET MESSAGE ACCESS PROTOCOL)的RFC文档:http://www.isi.edu/in-notes/rfc3501.txt
Twisted的下载地址:http://twistedmatrix.com/trac/wiki/Downloads
1. Twisted基础
tconn.py连接一个IMAP服务器并且打印出服务器支持的功能,并且介绍了典型的Twisted应用程序。
tlogin.py登录IMAP服务器。
t-error.py介绍了Twisted的错误处理,与通常的抛出异常方式不同,Twisted使用addErrback的方法来添加错误处理函数。
2. 文件夹
tlist.py使用list方法来列出文件夹列表。
texamine.py使用examine方法来检查INBOX的信息。
访问邮件可以使用Message number(在选择文件夹的时候确定,多次访问文件夹会发生变化) 或者是 UID(不变)。
3. 下载
tdlbig.py使用fetchSpecific('1:*', peek = 1))下载整个邮箱。peek设置为1(True)可以让被阅读的邮件不被标记为已读(seen)。
tdownload.py下载一封单独的邮件。
首先使用fetchUID('1:*')获得所有邮件的UID,并且传递给handleuids函数。handleuids使用fetchSpecific(uid, uid = 1, peek = 1)来下载一封邮件,uid=1表示第一个参数是uid而不是message number。它还创建了一个DeferredList ,dl = defer.DeferredList(dlist),并且给这个DeferredList添加了回调函数。
4. 标记和删除
tflags.py使用fetchFlags('1:*')获取所有邮件的标记。
tdownload-and-delete.py使用addFlags()下载并且删除邮件。
d = self.proto.addFlags(str(self.uidlist), ["//Deleted"], uid = 1)
5. 取得邮件的部分内容
tstructure.py使用fetchSimplifiedBody和fetchEnvelope来取得邮件的结构信息。
tdlpart.py使用fetchSpecific来获得邮件的一部分。
6. 查找邮件
tsearch.py使用search方法来查找邮件,查询使用Not、Or和Query构造。
7. 添加邮件
tappend.py使用append方法向IMAP服务器上传一封邮件。