#Email(电子邮件)的历史比Web还要久远。直到现在,Email还是互联网上应用非常广泛的服务。
#在我们开始编写邮件操作的相关代码之前,先了解一下电子邮件在互联网上是如何运作的。
#电子邮件其实是我们生活中快递的电子化,现实中快递是怎么处理的,比如你在上海,要邮寄一份文件给北京的朋友。
#首先需要准备好邮寄的文件,选择一家快递公司(一般是上门取件或到代理点投递),快递公司会提供对应的信封,在信封上填写地址,剩下的事就由快递公司处理了。
#快递公司会将一个地点的信件从就近的小代理点汇聚到一个快递中心,再从快递中心往别的城市发,比如先发到河南某城市的快递中心,再从该处发往北京,也可能由上海直达北京,不过你不用关心具体的线路,只需要知道一件事,就是信件走得比较慢,至少要几天时间。
#信件到达北京的快递中心后不会直接送到朋友手里。快递员为了避免你的朋友不在,而让自己白跑一趟,会将信件投递到邮件指定的地址,这个地址可能是你朋友居住附近的快递箱、家里或所在公司,总之,当你的朋友知道自己的信件已经到达时,就可以取到信件了。
#电子邮件的流程基本上是按上面的方式运作的,只不过速度不是按天算,而是按秒算。
#现在回到电子邮件,假设自己的电子邮件地址是[email protected],对方的电子邮件地址是[email protected],用Outlook或Foxmail之类的软件写好邮件,填上对方的Email地址,单机“发送”按钮,电子邮件就发送出去了,这些电子邮件被称为邮件用户代理(Mail User Agent,MUA).
#Email从MUA发出去后,不是直接到达对方电脑,而是发到邮件传输代理(Mail Transfer Agent,MTA),就是Email服务提供商,如网易、阿里云等,由于自己的电子邮件地址是@qq.com,因此Email首先被投递到腾旭提供的MTA,再由腾讯的MTA发送到对方的服务商,也就是阿里的MTA,在这个过程还可能经过别的MTA,但是我们不用关心具体线路,只关心速度即可。
#Email到达阿里的MTA后,由于对方使用的是@aliyun.com的邮箱,因此阿里的MTA会把Email投递到邮件的最终目的地邮件投递代理(Mail Delivevy Agent,MDA)。Email到达MDA后,会存放再阿里云服务器的某个文件或特殊的数据库里,我们将这个长期保存邮件的地址称之为电子邮箱。
#同普通邮件类似,Email不会直接到达对方的电脑,因为对方的电脑不一定开机,开机也不一定联网。对方要取到邮件,必须通过MUA从MDA上获取。
#一封电子邮件的旅程是:
发件人→MUA→MTA→MTA→若干个MTA→MDA←MUA←收件人
#了解了上述基本概念,要编写程序发送和接收邮件,本质就是:
①、编写MUA把邮件发到MTA。
②、编写MUA从MDA上收邮件。
#发邮件时,MUA和MTA使用的协议是SMTP(Simple Mail Transfer Protocol),后面的MTA到另一个MTA也是用SMTP协议。
#收邮件时,MUA和MDA使用的协议有两种:一种是POP(Post Office Protocol),目前版本是3,俗称POP3;另一种是IMAP(Internet Message Access Protocol),目前版本是4,优点是不但能收取件,而且可以直接操作MDA上存储的邮件,如从收件箱移到垃圾箱等。
#邮件客户端软件在发邮件时,会让你先配置SMTP服务器,就是要发到哪个MTA上。假设你正在使用163邮箱,就不能直接发到阿里的MTA上,因为它只服务于阿里的用户,所以需要填写163提供的SMTP服务器地址smtp.163.com。为了证明你是163的用户,SMTP服务器还要求你填写邮箱地址和客户端授权密码,这样MUA才能正常把Email通过SMTP协议发送到MTA。
#同样。从MDA收邮件时,MDA服务器也要求验证你的客户端授权密码,确保不会有人冒充你收取邮件。一般Outlook之类的邮件客户端会要求填写POP3或IMAP服务器地址、邮箱地址和授权密码。这样,MUA才能顺利通过POP或IMAP协议,从MDA取到邮件。
#在使用Python收发邮件前,需要先准备好至少两个电子邮箱,如[email protected],[email protected]、[email protected]等,注意两个邮箱不要用同一家邮件服务商。
#最后特别注意,目前大多数邮件服务商都需要手动打开SMTP发信和POP收信功能,否则只允许在网页登陆。