POP:
第一个用于下载邮件的协议称为邮局协议(Post Office Protocal,POP)。
POP的目的是让用户的工作站可以访问邮箱服务器 里的邮件,并在工作站中,通过简单邮件传输协议(SMTP)将邮件发送到邮件服务器”。POP 协议的最新版本是第 3 版,也称为 POP3。
IMAP :
IMAP 旨在提供比 POP 更完整的解决方案,但它也因此比 POP 更复杂。例如,IMAP 非 常适合今天的需要,因为用户需要通过不同的设备使用电子邮件,如台式机、笔记本电脑、 平板电脑、手机、视频游戏系统等。POP 无法很好地应对多邮件客户端,尽管 POP 应用依然 广泛,但大部分情况下已经被废弃了。注意,许多 ISP 当前只提供 POP 来接收(用 SMTP 发 送)邮件。希望今后 IMAP 能得到更多应用。
# -*- coding:utf-8 -*-
'''两个创建电子邮件消息的示例,即 make_mpa_msg()和 make_img_msg(),
两者都创建了一条带有附件的电子邮件消息。前者创建并发送了一条多部分消息,后者创建
并发送了一条电子邮件消息,其中含有一幅图片。'''
#这个python2 脚本创建并发送了两种不同类型的电子邮件消息
from email.mime.image import MIMEImage
from email.mime.multipart import MIMEMultipart
from email.mime.text import MIMEText
from smtplib import SMTP
#mutipart alternative: text and html
def make_mpa_msg():
email = MIMEMultipart('alternatice')
text = MIMEText('Hello World! \r\n','plain')
email.attach(text)
html = MIMEText(
'Hello World!
'
'','html')
email.attach(html)
return email
"""多部分选择消息通常包含两部分,一是以纯文本表示的邮件消息正文,以及等价的 HTML
格式。由邮件客户端来决定显示哪一部分。例如,基于 Web 的电子邮件系统会显示 HTML
版本,而基于命令行的邮件阅读器只会显示纯文本版本。
为了创建这种类型的消息,需要使用 email.mime.multiple.MIMEMultipart 类,并传递
alternative 作为唯一的参数来实例化这个类。如果不传递这个参数,则前面的纯文本和 HTML
会分别作为消息中的附件,这种情况下,有些邮件系统会同时显示这两部分的内容。
这两部分都会用到 email.mime.text.MIMEText 类,因为这两部分内容都是纯文本。每个
部分都要附加到邮件中,因为这两部分是在邮件创建之后才创建的。"""
# multipart:images
def make_img_msg(fn):
f = open(fn,'r')
data = f.read()
f.close()
email = MIMEImage(data, name=fn)
email.add_header('Content-Disposition',
'attachment;filename="%s' % fn)
return email
"""make_img_msg()函数使用一个文件名作为参数。使用文件中的数据生成一个新的
email.mime.image.MIMEImage 实例。添加一个 Content-Disposition 头,接着将消息返回给用户。"""
def sendMsg(fr, to, msg):
s = SMTP('localhost')
errs = s.sendmail(fr, to, msg)
s.quit()
"""sendMsg()的唯一目的是获取基本的电子邮件发送信息(发件人、收件人、消息正文),
接着传送消息,然后返回给调用者。
要查看更详尽的输出内容,可以试试这个扩展:s.set_debuglevel(True),其中 s 是 smtplib.SMTP
服务器。最终,与前面一样,因为许多 SMTP 服务器需要登录,所以需要在这里登录(在登录
之后,发送电子邮件消息之前)。"""
if __name__ == '__main__':
print 'Sending multipart alternative msg ...'
msg = make_mpa_msg()
msg['From'] = SENDER
msg['To'] = ', '.join(RECIPS)
msg['Subject'] = 'multipart alternative test'
sendMsg(SENDER, RECIPS, msg.as_string())
print 'Sending image msg...'
msg = make_img_msg(SOME_IMG_FILE)
msg['From'] = SENDER
msg['To'] = ', '.join(RECIPS)
"""这是这段脚本的主要部分,它仅仅测试这两个函数。用这两个函数创建消息,然后添加
From、To、Subject 字段,然后将消息传送给这些收件人。当然,为了让应用能够工作,需要
填充下面的字段:SENDER、RECIPS、SOME_IMG_FILE。"""