account(帐号):一个有指定的用户名和口令的用于访问计算机或网络的表格,它通常带有一个主目录,一个e-mail信箱和一系列访问权限。
address(地址):1、某台计算机(也称网上主机或intermet节点)的地址,格式为hostsubdomaindomain。2、一个e-mail地址,格式为。3、一个web地址(url)格式为:。
address book(地址簿):在有些e-mail程序中,address book是e-mail地址的简要列表。
anonymous ftp(匿名ftp):ftp(internet文件传输协议)最常见的使用方法。允许匿名ftp访问的ftp的ftp节点,不要求在访问时输入口令——登录时用户只需输入anonymous作为用户名,将自己的e-mail地址作为口令以备记录。
answers:用于邮寄faq公告的调制新闻组。在“answers”中,“”代表任何名称。“answers”新闻组包括newsanswers、altanswers、recanswers,miscanswers等等。
article(文章):一个usenet邮件。
attachment(附件):与用户e-mail消息一起发送的任何格式的数据文件。
avi:windows平台提供的**格式。
back(返回):1、一个web浏览器命令,通常是一个用于返回用户先前看过的页面或链路的快捷键。2、在unix页面程序中,这个命令可以返回到前一个屏幕。
bandwidth(带宽):1、在一定时间间隔内通过传输线所能传输的信息量。2、竭尽全力不想在网络中浪费时间的人常常提起的一个字眼。
baud(波特率):这个词经常与bps(每秒钟的位数)相混淆。baud是一个技术词汇,指的是用户的调制解调器每秒钟通过电话线改变信号的次数。
bbs(公告牌):一个布告栏系统,有许多bbs都连接到internet上。
bcc line:是e-mail信息头的一部分,在那儿可以列出要将信息盲拷贝发送到的接收者名单。这就意味着最初的以及cc:接受者将不会看到接受盲拷贝者的姓名。
bookmark(书签):web或gopher浏览器中的目标记录,用户可以在任何时候立即返回到bookmark中的目标(在一些浏览器和其它hotlist的项目中,bookmark也叫做favorites place)。
'bot:是网络上的一种自动机制,它可以自动实现人们经常用到的一些功能。
bps(位/秒):每秒位数,是调解调器速度的测量单位。
browse(浏览):浏览网络上的信息资源,如usenet、gopherspace或web。
browser(浏览器):用户用来阅读web页面的应用程序。
bulletin board(公告牌或布告栏):1、一些联机服务称之为讨论组。2、一个布告栏系统。
bulletin board sustem(布告栏系统):由一系列计算机和调制解调器组成的系统,系统中运行布告栏软件,允许用户拨号、发送邮件、参加座谈以及(有时)访问internet。
cascade(级联):一系列无意义的邮件,它们一个接一个在屏幕上按行显示巨大的>符号。
chat:(聊天):通过网络进行同步的。一行接一行的传输。
client:(客户程序):用于与服务器进行通讯,以获得信息的应用程序。
com:一个代表商业系统的internet域名。
com port(串行接口):用户pc机的通信接口,用户的modem就插在了这样一个的接口上。
command line(命令行):基于字符的 *** 作系统shell,如unix或dos外壳,在那里用户可以直接键入命令(通过常在屏幕的底部)。
commercial online service(商业联机服务):一个专有网络,能够提供自己的内容和对其它网络成员的访问。如compuserve,america online、prodigy和microsoft network。
compress(压缩):1、压缩文件(动词)。2、一个用来压缩文件的unix程序(名词)。
compression(压缩):文件的压缩方法或压缩量。
compuserve:一种流行的联机服务。
copyright(版权):有关如何将遵守版权法应用于邮寄到usenet的文章或在internet上提供的文本的问题,人们还存在有争议。有些人在自己的邮件中附加版权声明。参见“fair use(正当使用)”。
cracker:闯入计算机系统的“黑客”。
data bits(数据位):在使用modem时用户必须设置的一项内容,通常设置为7位或8位,这要根据用户要呼叫的modem来确定。
decoding(解码):把使用密码格式的文件复原为原来的格式。
dial-up account(拨号帐号):iternet网上主机的帐号,用户必须通过调制解调器拨号方可使用。
digest(摘要):邮件列表的集合,可以做为消息发送。
direct-access isp(直接访问isp):网络服务供应商(通常称作isp, 既internet service provider),它与联机服务不同,可以提供对 internet的直接访问。
directory(目录):一个web节点,其它web节点在这里依标题来分类组织,有点象黄皮电话号码本。
discussion groups(讨论组):在网络中任何进行讨论的地方,其中包括邮件列表和 usenet新闻组。
domain(域名):三个字母的代码,用来说明哪些地址是商业性的(com)、非赢利组织( org)、大学(edu)、政府部门(gov)、部队(mil)等等。
download(下载):将远程计算机中的文件经modem传输到用户的公式计算机上。
dlm :一个流行的unix邮件程序。
elmrc:elm的设置文件。
emacs:unix *** 作环境,兼作文本编辑器。
e-mail(电子邮件):这是电子邮件,用户早已经知道了,不是吗?
e-mail(电子邮件地址):一个internet地址,由用户名(也称登录,登录名,用户标识,帐号名等等),后跟符号“位于”(@)符号,然后再跟形式地址hostsubdomaindomain。
file transfer(文件传送):把文件从一台计算机拷贝到另一台计算机。
freeware(免费软件):可从网上下载的免费软件。
ftp:即file transfer protocol——文件传输协议,它是internet上进行计算机间文件传输的标准方式。
ftpsite(ftp节点):包含ftp文件库和设置的网上计算机。
ftpmail:没有ftp应用程序时,通过e-mail使用ftp的方法。
full name (全名):在e-mail消息和usenet邮件中用到的用户全名。
full-screen editor(全屏幕编辑器):一个文本编辑器,用户可以在屏幕各处移动插入标记或光标,与其相对的是行编辑器,其插入标记总是在屏幕的最底部。
fuq:经常不回答的问题。
gated:即分别连接到相应邮件列表或新闻组的新闻组或邮件列表。
gate(网关):gateway的简写形式,指将e-mail从一个网络传送到另一个网络,或从新闻组传送给目录的计算机。反之亦然。
gateway(网关):1、一台计算机,它将一个网络与另一个网络相连,当两个网络使用不同的协议时,就通过它来完成文件或e-mail的传输。2、一台计算机,它将邮件从一个新闻组传送给一个列表,或者反向传送。
gif:1、一种图形文件的压缩格式(gif制图形交换格式——graphics interchange format),由compuserve公司发明。2、gif格式的文件。
group:一个新闻组。
gzip:一个文件压缩程序。
hack:深入挖掘某些计算机的行为,必要时深入内部重新进行发明。
hacker(黑客):一个计算机通,能够随心所欲的驾驶计算机的人都可称为hacker(闯入他人计算机系统的人称为cracker )。在世界上的其它地方,人们总是把那些闯如他人计算机系统的人称为hacker。
history(历史):用户最后一些行为的记录。在web页面上,它就是从用户启动web浏览器程序后所看过的所有页面的列表。历史列表实际上只显示用户从起点开始访问的页面。一旦用户回过头来跟踪另一个链路,那么就会失去先前路径的历史列表。
home directory(主目录):在unix系统中用户登录自己的帐号时进入的起始目录。
home page(主页):1、当用户启动web浏览器时最先访问的页面。2、一个 web节点的主页面。3、用户自己的web页面。
host(主机):internet网上的计算机。
hotjava:一个由sun microsystems公司制作的web浏览器。
html:hujpertext markup language——超文本标识语言。超文本语言用于web页面,它由常规文本和标签组成以通知web浏览器当一条链路被击活后应该做些什么 *** 作。
httjp:hypertext transfer protocol——超文本传输协议,即用于连接web页面的web协议。
hypermedia(超级媒体):链接的文档,它是由纯文本和其它媒体,如、声音、**等共同构成。
hypertext(超文本):含有指向其它文本文件链路的文本。
hypertext link(超文本链路):从一个文本到另一个文本文件的链路。
hytelnet:一个telnet shell,用于帮助用户查找所需要的telnet节点,并运行telnet会议。它由一个大型的大学列表和一个公共图书馆目录所组成。
internet(互联网):全球网络的网络。internet是计算机间进行通信的方式。它不是一个地点,而是一种通行的路径。
internet explorer:microsoft公司的web浏览器。
internet service provider(isp)internet(服务供应商):一个只提供internet访问而没有本地内容的公司(或者只有有局限的本地信息和讨论组)。
ip:internet protocol——iternet协议,是允许计算机和网络通过 internet进行相互通信的协议。
java:一种由sun公司提出的,从c++发展而来的程序设计语言。通过特殊的java-savy浏览器,如hotjava,netscape20,或者含有java插件的netscape的早期版本,用户可以在浏览器窗口中实现交互式程序设计。
keyword(关键字):用来查找文件、文档或web页面的词汇。
lan(局域网):通常由某一办公室或一建筑物内的计算机组成的网络。
link(链路):web页面上的一个按钮或一个高亮的文本,当选中它们时可使读者跳转到其它web页面中。
log in(登录):使用用户自己的internet帐号开始网络对话。
mail box(邮箱):邮件程序中存储消息的区域或文件夹。
message(消息):1、一封e-mail信件。2、在irc中只传给某人而不是整个通道的内容。
modem(调制解调器):将用户计算机与电话插转盒相连,通过电话线与另一台调制解调器和计算机相连的装置(其含义为调制器modulator/解调器demodulator)。
netscape navigator:随手可得的最流行的指向而不是>
python中email模块使得处理邮件变得比较简单,今天着重学习了一下发送邮件的具体做法,这里写写自己的的心得,也请高手给些指点。
一、相关模块介绍
发送邮件主要用到了smtplib和email两个模块,这里首先就两个模块进行一下简单的介绍:
1、smtplib模块
smtplibSMTP([host[, port[, local_hostname[, timeout]]]])
SMTP类构造函数,表示与SMTP服务器之间的连接,通过这个连接可以向smtp服务器发送指令,执行相关 *** 作(如:登陆、发送邮件)。所有参数都是可选的。
host:smtp服务器主机名
port:smtp服务的端口,默认是25;如果在创建SMTP对象的时候提供了这两个参数,在初始化的时候会自动调用connect方法去连接服务器。
smtplib模块还提供了SMTP_SSL类和LMTP类,对它们的 *** 作与SMTP基本一致。
smtplibSMTP提供的方法:
SMTPset_debuglevel(level):设置是否为调试模式。默认为False,即非调试模式,表示不输出任何调试信息。
SMTPconnect([host[, port]]):连接到指定的smtp服务器。参数分别表示smpt主机和端口。注意: 也可以在host参数中指定端口号(如:smptyeahnet:25),这样就没必要给出port参数。
SMTPdocmd(cmd[, argstring]):向smtp服务器发送指令。可选参数argstring表示指令的参数。
SMTPhelo([hostname]) :使用"helo"指令向服务器确认身份。相当于告诉smtp服务器“我是谁”。
SMTPhas_extn(name):判断指定名称在服务器邮件列表中是否存在。出于安全考虑,smtp服务器往往屏蔽了该指令。
SMTPverify(address) :判断指定邮件地址是否在服务器中存在。出于安全考虑,smtp服务器往往屏蔽了该指令。
SMTPlogin(user, password) :登陆到smtp服务器。现在几乎所有的smtp服务器,都必须在验证用户信息合法之后才允许发送邮件。
SMTPsendmail(from_addr, to_addrs, msg[, mail_options, rcpt_options]) :发送邮件。这里要注意一下第三个参数,msg是字符串,表示邮件。我们知道邮件一般由标题,发信人,收件人,邮件内容,附件等构成,发送邮件的时候,要注意msg的格式。这个格式就是smtp协议中定义的格式。
SMTPquit() :断开与smtp服务器的连接,相当于发送"quit"指令。(很多程序中都用到了smtpclose(),具体与quit的区别google了一下,也没找到答案。)
2、email模块
emial模块用来处理邮件消息,包括MIME和其他基于RFC 2822 的消息文档。使用这些模块来定义邮件的内容,是非常简单的。其包括的类有:
class emailmimebaseMIMEBase(_maintype, _subtype, _params):这是MIME的一个基类。一般不需要在使用时创建实例。其中_maintype是内容类型,如text或者image。_subtype是内容的minor type 类型,如plain或者gif。 _params是一个字典,直接传递给Messageadd_header()。
class emailmimemultipartMIMEMultipart([_subtype[, boundary[, _subparts[, _params]]]]:MIMEBase的一个子类,多个MIME对象的集合,_subtype默认值为mixed。boundary是MIMEMultipart的边界,默认边界是可数的。
class emailmimeapplicationMIMEApplication(_data[, _subtype[, _encoder[, _params]]]):MIMEMultipart的一个子类。
class emailmimeaudio MIMEAudio(_audiodata[, _subtype[, _encoder[, _params]]]): MIME音频对象
class emailmimeimageMIMEImage(_imagedata[, _subtype[, _encoder[, _params]]]):MIME二进制文件对象。
class emailmimemessageMIMEMessage(_msg[, _subtype]):具体的一个message实例,使用方法如下:
msg=mailMessageMessage() #一个实例
msg['to']='XXX@XXXcom' #发送到哪里
msg['from']='YYY@YYYYcom' #自己的邮件地址
msg['date']='2012-3-16' #时间日期
msg['subject']='hello world' #邮件主题
class emailmimetextMIMEText(_text[, _subtype[, _charset]]):MIME文本对象,其中_text是邮件内容,_subtype邮件类型,可以是text/plain(普通文本邮件),html/plain(html邮件), _charset编码,可以是gb2312等等。
二、几种邮件的具体实现代码
1、普通文本邮件
普通文本邮件发送的实现,关键是要将MIMEText中_subtype设置为plain。首先导入smtplib和mimetext。创建smtplibsmtp实例,connect邮件smtp服务器,login后发送,具体代码如下:(python26下实现)
# -- coding: UTF-8 --
import smtplib
from emailmimetext import MIMEText
mailto_list=[YYY@YYYcom]
mail_host="smtpXXXcom" #设置服务器
mail_user="XXXX" #用户名
mail_pass="XXXXXX" #口令
mail_postfix="XXXcom" #发件箱的后缀
def send_mail(to_list,sub,content):
me="hello"+"<"+mail_user+"@"+mail_postfix+">"
msg = MIMEText(content,_subtype='plain',_charset='gb2312')
msg['Subject'] = sub
msg['From'] = me
msg['To'] = ";"join(to_list)
try:
server = smtplibSMTP()
serverconnect(mail_host)
serverlogin(mail_user,mail_pass)
serversendmail(me, to_list, msgas_string())
serverclose()
return True
except Exception, e:
print str(e)
return False
if __name__ == '__main__':
if send_mail(mailto_list,"hello","hello world!"):
print "发送成功"
else:
print "发送失败"
2、html邮件的发送
与text邮件不同之处就是将将MIMEText中_subtype设置为html。具体代码如下:(python26下实现)
# -- coding: utf-8 --
import smtplib
from emailmimetext import MIMEText
mailto_list=["YYY@YYYcom"]
mail_host="smtpXXXcom" #设置服务器
mail_user="XXX" #用户名
mail_pass="XXXX" #口令
mail_postfix="XXXcom" #发件箱的后缀
def send_mail(to_list,sub,content): #to_list:收件人;sub:主题;content:邮件内容
me="hello"+"<"+mail_user+"@"+mail_postfix+">" #这里的hello可以任意设置,收到信后,将按照设置显示
msg = MIMEText(content,_subtype='html',_charset='gb2312') #创建一个实例,这里设置为html格式邮件
msg['Subject'] = sub #设置主题
msg['From'] = me
msg['To'] = ";"join(to_list)
try:
s = smtplibSMTP()
sconnect(mail_host) #连接smtp服务器
slogin(mail_user,mail_pass) #登陆服务器
ssendmail(me, to_list, msgas_string()) #发送邮件
sclose()
return True
except Exception, e:
print str(e)
return False
if __name__ == '__main__':
if send_mail(mailto_list,"hello","<a href=''>小五义</a>"):
print "发送成功"
else:
print "发送失败"
3、发送带附件的邮件
发送带附件的邮件,首先要创建MIMEMultipart()实例,然后构造附件,如果有多个附件,可依次构造,最后利用smtplibsmtp发送。
# -- coding: cp936 --
from emailmimetext import MIMEText
from emailmimemultipart import MIMEMultipart
import smtplib
#创建一个带附件的实例
msg = MIMEMultipart()
#构造附件1
att1 = MIMEText(open('d:\\123rar', 'rb')read(), 'base64', 'gb2312')
att1["Content-Type"] = 'application/octet-stream'
att1["Content-Disposition"] = 'attachment; filename="123doc"'#这里的filename可以任意写,写什么名字,邮件中显示什么名字
msgattach(att1)
#构造附件2
att2 = MIMEText(open('d:\\123txt', 'rb')read(), 'base64', 'gb2312')
att2["Content-Type"] = 'application/octet-stream'
att2["Content-Disposition"] = 'attachment; filename="123txt"'
msgattach(att2)
#加邮件头
msg['to'] = 'YYY@YYYcom'
msg['from'] = 'XXX@XXXcom'
msg['subject'] = 'hello world'
#发送邮件
try:
server = smtplibSMTP()
serverconnect('smtpXXXcom')
serverlogin('XXX','XXXXX')#XXX为用户名,XXXXX为密码
serversendmail(msg['from'], msg['to'],msgas_string())
serverquit()
print '发送成功'
except Exception, e:
print str(e)
4、利用MIMEimage发送
# -- coding: cp936 --
import smtplib
import mimetypes
from emailmimetext import MIMEText
from emailmimemultipart import MIMEMultipart
from emailmimeimage import MIMEImage
def AutoSendMail():
msg = MIMEMultipart()
msg['From'] = "XXX@XXXcom"
msg['To'] = "YYY@YYYcom"
msg['Subject'] = "hello world"
txt = MIMEText("这是中文的邮件内容哦",'plain','gb2312')
msgattach(txt)
file1 = "C:\\hellojpg"
image = MIMEImage(open(file1,'rb')read())
imageadd_header('Content-ID','<image1>')
msgattach(image)
server = smtplibSMTP()
serverconnect('smtpXXXcom')
serverlogin('XXX','XXXXXX')
serversendmail(msg['From'],msg['To'],msgas_string())
serverquit()
if __name__ == "__main__":
AutoSendMail()
利用MIMEimage发送,原本是想能够在正文中显示,可是代码运行后发现,依然是以附件形式发送的,希望有高手能够指点一下,如何可以发送在正文中显示的的邮件,就是是附件中存在,但同时能显示在正文中,具体形式如下图。
1、称呼收件人
我们除了要写明称呼(例如 Dear Mr Zhang)之外,也要紧记在[TO]一栏填上收信人的名字及邮件地址。这一方面是基本礼貌,而且有些电子邮件过滤软件会将在TO、CC或BCC几栏中没有填写收信人电子邮件地址的信当成垃圾邮件处理掉。
2、KISS(Keep It Simple and Stupid)
我们对顾客的特性有两个很常用的描述,一是[顾客永远是对的],还有就是[顾客永远是蠢的]。因此我们应把邮件内容整理得尽量易懂而直接。将内容清楚分段,再配合小标题,用户就易于阅读及理解。不妨将长篇大论的产品资料分拆成简单易看的bullet points(要点)。
3、方法和拼字
显得专业,就要在文法拼字方面下点功夫。不论中、英文都要注重文法。否则即使读者读了一次你的电子邮件,下次也会放弃。此外拼字也十分重要。有不少Spammer都喜欢故意拼错字 来避开Spam filter (垃圾邮件过滤器)。如将offer拼成0ffer。以数字[0]代替英文字母[O]。甚至在一些spam keyword 上遗漏一两个字母。当然,文法与错字的问题本身就给人极差的观感。因此若你要制作专业的电子邮件,就不要错了。
4、不要传送附件
不要传送附件,电子邮件病毒爆发是接二连三地发生。因此读者一般都提高了警觉,不易打开附件,因此请将你要发的内容全放在电子邮件之内,以免被误会是恶意邮件。
5、不要要求用户下载文档
和第四点的原理相同,伪造电子邮件和网站实在太多了,尽量不应请收件者下载档案。如果真的想读者下载档案,就请他们跳转到贵公司的网站吧。
6、免用简写
有时我们会用简写来代表一些行内术语,但我们不要期望读者一定会明白,尤其是蠢的顾客。所以还是避免为妙。即使要用,也要在后面加入全写。
7、提供公司的****
虽然收件者很少会直接联系发送邮件的公司,但此举有助澄清这封邮件不是垃圾邮件,也不是来自伪冒网站的。因此,提供联络方法,如电子邮件、电话号码与传真号码等。可给收件者留下一个正面的印象。
8、 将newsletter放到互联网
每次发送一份Email Newsletter之前,先把它放到自己公司的网站上。一方面,让读者得知那份资讯绝无虚假。另一方面,也方便用户浏览以往每一期的内容。事实上,如果这些定期资讯做得好,可以成为公司网站的宝贵内容;吸引读者进入浏览,从而刺激他们留意公司的或产品。
9、发送切忌频繁。
对于大多数的公司,一个月发送一到两次是最合理的。
10、选择干净设计
一定要有足够的白色空间,以便浏览者容易留意到你邮件的每个元素。还有一个设计提示:如果你的邮件由过多组成,人们第一感觉会先留意到旁边的白色区域,而不是你的邮件主体。正确的邮件设计是简洁的文字加以适当的。
11、广告巧妙构思
最好的邮件信息是对读者有用的。例如,一个销售饰品的,可以提供一个季节性的潮流风格指南;一家企业软件公司可以发送一些提高办公效率的技巧。
12、配合其他媒体
邮件是一个很好吸引流量到你的博客或社交媒体上的方式。你只需要在邮件上发布你的信息摘要,然后连接到有完整内容的博客或社交媒体上就足够了。
13、感兴趣的主题
人们需要足够的刺激才能引起兴趣,就跟顾客在网站注册一 样,没有足够的兴趣,只能换来关闭或者删除的结果。所以,在邮件标题或者摘要(QQ邮件提示会有),务必要一针见血的说明你的邮件对我有什么好处,人们只关心有没有iphone4可以抽奖,而不会理会你公司的经营状况。
14、挖掘客户所好
为了挖掘潜在客户的兴趣,你需要了解的不仅仅是他们的邮箱地址。首先你需要做一个兴趣调查。注意问卷的问题不要太多,否则用户是不大可能帮你完成 的。最好就是他们在网站注册后几天发送一个调查邮件,询问他们的职业和兴趣爱好。个人建议每年进行一次类似这样的调查,以便获得用户最新情况。
有些公司的邮件里还会提供follow按钮,和分享按钮,以便用户收藏或者分享信息到自己的社交媒体上。
简单邮件传输协议(SMTP)的目标是可靠高效地传送邮件,它独立于传送子系统而且仅要求一条可以保证传送数据单元顺序的通道。附录A,B,C和D描述了不同传送服务下SMTP的使用。在名词表中还定义了本文档中使用的术语。
SMTP的一个重要特点是它能够在传送中接力传送邮件,传送服务提供了进程间通信环境(IPCE),此环境可以包括一个网络,几个网络或一个网络的子网。理解到传送系统(或IPCE)不是一对一的是很重要的。进程可能直接和其它进程通过已知的IPCE通信。邮件是一个应用程序或进程间通信。邮件可以通过连接在不同IPCE上的进程跨网络进行邮件传送。更特别的是,邮件可以通过不同网络上的主机接力式传送。
是因特网电子邮件系统首要的应用 层协议。它使用由TCP提供的可靠的数据传输服务把邮件消息从发信人的邮件服务器传送到收信人的邮件服务器。跟大多数应用层协议一样,SMTP也存在两个 端:在发信人的邮件服务器上执行的客户端和在收信人的邮件服务器上执行的服务器端。SMTP的客户端和服务器端同时运行在每个邮件服务器上。当一个邮件服 务器在向其他邮件服务器发送邮件消息时,它是作为SMTP客户在运行。当一个邮件服务器从其他邮件服务器接收邮件消息时,它是作为SMTP服务器在运行。
SMTP协议与人们用于面对面交互的礼仪之间有许多相似之处。首先,运行在发送端邮件服务器主机上的SMTP客户,发起建立一个到运行在接收端邮件服务 器主机上的SMTP服务器端口号25之间的TCP连接。如果接收邮件服务器当前不在工作,SMTP客户就等待一段时间后再尝试建立该连接。这个连接建立之 后,SMTP客户和服务器先执行一些应用层握手 *** 作。就像人们在转手东西之前往往先自我介绍那样,SMTP客户和服务器也在传送信息之前先自我介绍一下。 在这个SMTP握手阶段,SMTP客户向服务器分别指出发信人和收信人的电子邮件地址。彼此自我介绍完毕之后,客户发出邮件消息。SMTP可以指望由 TCP提供的可靠数据传输服务把该消息无错地传送到服务器。如果客户还有其他邮件消息需发送到同一个服务器,它就在同一个TCP连接上重复上述过程;否 则,它就指示TCP关闭该连接。[1]
编辑本段2 SMTP模型
SMTP设计基于以下通信模型:针对用户的邮件请求,发送SMTP建立与接收SMTP之间建立一个双向传送通道。接收SMTP可以是最终接收者也可以是中间传送者。SMTP命令由发送SMTP发出,由接收SMTP接收,而应答则反方面传送。
一旦传送通道建立,SMTP发送者发送MAIL命令指明邮件发送者。如果
SMTP接收者可以接收邮件则返回OK应答。SMTP发送者再发出RCPT命令确认邮件是否接收到。如果SMTP接收者接收,则返回OK应答;如果不能接收到,则发出拒绝接收应答(但不中止整个邮件 *** 作),双方将如此重复多次。当接收者收到全部邮件后会接收到特别的序列,如果接收者成功处理了邮件,则返回OK应答。
SMTP提供传送邮件的机制,如果接收方与发送方连接在同一个传送服务下时,邮件可以直接由发送方主机传送到接收方主机;或者,当两者不在同一个传送服务下时,通过中继SMTP服务器传送。为了能够对SMTP服务器提供中继能力,它必须拥有最终目的主机地址和邮箱名称。
MAIL命令参数是回复路径,它指定邮件从何处来;而RCPT命令的参数是转发路径的,它指定邮件向何处去。向前路径是源路径,而回复路径是返回路径(它用于发生错误时返回邮件)。
当同一个消息要发往不同的接收者时,SMTP遇到了向不同接收者发送同一份数据的复制品的问题,邮件命令和应答有一个比较奇怪的语法,应答也有一个数字代码。在下面,例子中可以看到哪些使用实际的命令和应答。完整的命令和应答在第四节。
命令与应答对大小写不敏感,也就是说,命令和应答可以是大写,小写或两者的混合,但这一点对用户邮件名称却不一定是对的,因为有的主机对用户名大小写是敏感的。这样SMTP实现中就将用户邮箱名称保留成初始时的样子,主机名称对大小写不敏感。
命令与应答由ASCⅡ字母表组成,当传送服务提供8位字节传送通道,每7位字符正确传送,而最高位被填充为0。当指定一般的命令或应答格式后,参数会由一些类似于语言的字符串表示出来,如"<string>"或"<reverse-path>",这里尖括号表示这是一种类似于语言的变量。
编辑本段3 SMTP过程
本节提供了SMTP中的一些过程。头一个说明的是基本发送过程(定义为发送 *** 作)。下来描述向前传送邮件,确认邮箱名称和扩展邮件列表,发送到终端和打开关闭交换。在本节的最后是对中断,邮件域的说明。本节的例子只是一部分命令和应答的序列,完整的例子见附录F。
31 MAIL
在SMTP发送 *** 作中有三步, *** 作由MAIL命令开始给出发送者标识。一系列或更多的RCPT命令紧跟其后,给出了接收者信息,然后是DATA命令列出发送的邮件内容,最后邮件内容指示符确认 *** 作。
过程中的第一步是MAIL命令,<reverse-path >;包括源邮箱。
MAIL <SP> FROM:<reverse-path><CRLF>
此命令告诉接收者新的发送 *** 作已经开始,请复位所有状态表和缓冲区。它给出反向路径以进行错误信息返回。如果请求被接收,接收方返回一个250 OK应答。<reverse-path>;中不止包括了邮箱,它包括了主机和源邮箱的反向路由,其中的第一个主机就是发送此命令的主机。
过程中的第二步是发送RCPT命令。
RCPT <SP> TO:<forward-path> <CRLF>
此命令给出向前路径标识接收者,如果命令被接收,接收方返回一个
250 OK应答,并存储向前路径。如果接收者未知,接收方会返回一个550 Failure应答。此过程可能会重复若干次。
<forward-path>;不仅包括邮件,它是主机和目的邮箱的路由表,在其中的第一个主机就是接收命令的主机。过程中的第三步是发送DATA命令。
DATA <CRLF>
如果命令被接收,接收方返回一个354 Intermediate应答,并认定以下的各行都是信件内容。当信件结尾收到并存储后,接收者发送一个250 OK应答。因为邮件是在传送通道上发送,因此必须指明邮件内容结尾,以便应答对话可以重新开始。SMTP通过在最后一行仅发送一个句号来表示邮件内容的结束,在接收方,一个对用户透明的过程将此符号过滤掉,以不影响正常的数据。
注意:邮件内容包括如下提示:Date,Subject,To,Cc,From。
邮件内容指示符确认邮件 *** 作并告知接收者可以存储和再发送数据了。如果此命令被接收,接收方返回一个250 OK应答。DATA命令仅在邮件 *** 作未完成或源无效的情况下失败。
上面所述的过程是一个发送 *** 作。这些命令只能以上面的顺序使用。下例表示了在一个发送 *** 作中这些命令的使用。
SMTP过程例子 此例是在AlphaARPA主机的Smith发送邮件给BetaARPA主机的Jones,Green和Brown的,这里假定主机Alpha与主机Beta直接相连。
S: MAIL FROM:<Smith@AlphaARPA>
R: 250 OK
S: RCPT TO:<Jones@BetaARPA>
R: 250 OK
S: RCPT TO:<Green@BetaARPA>
R: 550 No such user here
S: RCPT TO:<Brown@BetaARPA>
R: 250 OK
S: DATA
R: 354 Start mail input; end with<CRLF><CRLF>
S: Blah blah blah
S: 等等
S: <CRLF><CRLF>
R: 250 OK
此信被前两个人接收,而第三个人在此主机上没有邮箱。
32 转发
下面是一些<forward-path>;中目的地址不正确的,但接收者知道正确的目的地址的例子。在这些例子中,下列应答之一(251,551)应该允许发送方与获得正确地址。
251:用户不在本地;将向前发送到<forward-path>;。
这个应答意味着,接收方SMTP知道用户的邮箱在另外的主机上,而且意味着将在未来使用正确的转向路径。请注意,主机或者用户,或者它们两者是不同的。接收方负责传送消息。
551 :用户非本地,请尝试<forward-path>
这个应答意味着接收SMTP知道用户的邮箱在另外的主机上,并意味着使用了正确的转发路径。注意请注意,主机或者用户,或者它们两者是不同的。接收方拒绝接收此用户的信件,发送者必须根据提供的信息重新发送或者向原发送者返回错误信息。下例显示了这些响应的应用。
转发的例子
S: RCPT TO:<Postel@USC-ISIARPA>
R: 251 User not local; will forward to<Postel@USC-ISIFARPA>
或者
S: RCPT TO:<Paul@USC-ISIBARPA>
R: 551 User not local; please try<Mockapetris@USC-ISIFARPA>
33 确认和扩展
SMTP提供了另外的确认用户名和扩展邮件列表的功能。这些功能由VREF和EXPN命令完成,它们都以字符串为参数。对于VREF命令,字符串参数指的是用户名,对此命令的响应要包括用户的命名和用户的邮箱。对于EXPN命令,字符串参数指的是邮件列表,对此命令的响应多于一个,它们要包括所有列表中用户的命名和他们的邮箱。
“用户名”是一个多余的项目,它是故意被加上的。如果主机采用VREF命令和EXPN命令,最后本地邮箱必须提供用户名使它被主机确认。如果主机选择由另外的字符串作为用户名,也是允许的。
在一些主机中,邮箱列表和一个邮箱的代名有一点不清楚,因为一般的数据结构可能包括两种类型的入口。如果要发出对邮件列表的确认,应该给出确定响应。在接收到这个消息后,主机将把邮件传送到列表上所有的地址上去,如果没有接收到确定响应,就会报告错误。例如,
"550 That is a mail list,not a user name"。如果请求用于扩展一个用户名,可能通过返回包括一个名字的列表来形成确定响应,如果没有接收到确定响应,就会报告错误。(例如,"550 That is a user name,not a mailing list")。
在多个响应的情况下(通常是对于EXPN而言的),每个应答指定一个邮箱。在模糊请求的情况下,例如"VRFY Smith",这里两个Smith的响应必须是"553 User ambiguous"。
确认用户名的情况如下例所示:例3:
确认用户名
S: VRFY Smith
R: 250 Fred Smith<Smith@USC-ISIFARPA>
或者
S: VRFY Smith
R: 251 User not local; will forward to<Smith@USC-ISIQARPA>
或者
S: VRFY Jones
R: 550 String does not match anything
或者
S: VRFY Jones
R: 551 User not local; please try<Jones@USC-ISIQ,ARPA>
或者
S: VRFY Gourzenkyinplatz
R: 553 User ambiguous
邮箱列表要求多个响应的情况如下例所示:
S: EXPN Example-People
R: 250-Jon Postel <Postel@USC-ISIFARPA>
R: 250-Fred Fonebone <Fonebone@USC-ISIQARPA>
R: 250-Sam Q Smith <SQSmith@USC-ISIQ,ARPA>
R: 250-Quincy Smith<@USC-ISIFARPA:Q-Smith@ISI-VAXAARPA>
R: 250-<joe@foo-unixARPA>
R: 250 <xyz@bar-unixARPA>
或者
S: EXPN Executive-Washroom-List
R: 550 Access Denied to You
VERF和EXPN命令的字符串命令参数因为具体实现的不同而不能再加以限制了。在一些系统上,EXPN命令的参数可能是一个包含邮件列表的文件名,但是在Internet上有许多不同的文件结构。
VRFY和EXPN命令在最小实现中并不包括,当它们实现时,它们也不要求被在传送间实现。
编辑本段34 发送信件和获得信件
SMTP的主要目的是将邮件发送到用户的邮箱中。由一些主机提供的类似的功能是把邮件送至用户的终端(如果用户正打开终端)。将邮件送到用户的邮箱中称为发送信件(mailing);而送至用户终端则称之为获得信件
(sending)。因为在一些主机上,这两者的实现十分类似,所以它们同时
被放入了SMTP中。然而,获得信件命令在SMTP的最小实现中是没有的。用户应该具有控制向终端上写信息的能力。大部分主机允许用户接受或者拒绝类似的信息。
下面三个命令被定义来支持获得信件。它们被用于邮件命令而不是MAIL
命令,指示接收SMTP这种 *** 作的特殊意义:
SEND <SP> FROM:<reverse-path><CRLF>
SEND命令要求邮件内容直接传送到用户终端。如果用户未打开终端(或
者未接收终端信息),450响应将返回一个RCPT命令。如果信息被成功发送,此 *** 作成功。
SOML <SP> FROM:<reverse-path><CRLF>;
Send或者MaiL命令要求将邮件内容直接发送到用户的终端上(如果用户在终端上)。如果用户不在终端上,邮件内容直接进入邮箱。如果邮件被发送到用户终端或者用户信箱,发送 *** 作成功。
SAML <SP> FROM:<reverse-path><CRLF>
Send和MaiL命令要求邮件内容直接发送到用户终端上(如果用户在终端上)。不管怎么样,信件都会进入信箱。如果信件进入信箱,发送 *** 作成功。
用于MAIL命令的响应和这些命令的响应相同。
编辑本段35 打开和关闭
当打开传送通道时,要交换一些信息以确定双方的身份。以下的命令是
用于打开和关闭的:
HELO <SP> <domain> <CRLF>
QUIT <CRLF>
在HELLO命令中,主机自己发送命令,此命令可以被解释为:“你好,
我是XX”。
打开联结的例子
R: 220 BBN-UNⅨARPA Simple Mail Transfer ServiceReady
S: HELO USC-ISIFARPA
R: 250 BBN-UNⅨARPA
关闭联结的例子
S: QUIT
R: 221 BBN-UNⅨARPA Service closing transmissionchannel
编辑本段36 转发
转发路径可能是如下格式:"@ONE,@TWO:JOE@THREE",在这里,ONE,TWO
和THREE是主机。这种格式用于强调地址和路径的区别。邮箱是绝对地址,路径是关于如何到达的信息。这两个概念不应该被混淆。
概念上,转发路径的元素被移动到回复路径作为从一个SMTP服务器到另一个SMTP服务器的信息。回复路径是一个反向数据源路径,例如从当前信息的位置到发起者的位置。当一个SMTP服务器从转发路径中删除自己的标记并将它插入到回复路径中时,它必须使用它发送环境能够理解的名称来进行,以防它的名称在不同的环境中被理解为不同的名字。
如果当SMTP接收到信息的转发路径的第一个元素不是此SMTP的标记时,此元素不从转发路径中删除,而被用来决定下一个应该发送到的SMTP服务器。在任何情况下,SMTP都将自己的标记加入反向路径中。
使用源路径时,接收SMTP接收转发的邮件并发送到另一接收SMTP服务器上。接收服务器可以接受或拒绝转发本地用户的邮件。接收SMTP通过将它自己的标记从转发路径移至回复路径的开始处来改变命令参数。这时,接收SMTP变成了发送SMTP,也就建立了到下一个转发路径中SMTP的通道,然后,它向这个SMTP发送邮件。
在回复路径上的头一个主机应是发送SMTP命令的主机,在转发路径上第一个主机应是接收SMTP命令的主机。
注意:转发路径和回复路径出现在SMTP命令和应答中,但不一定要出现在信
息中。也就是说,没有必须要这样的路径特别这种格式出现在信息头的"To:","From:"和"CC:"等域中。
如果SMTP服务器接受了转发任务,但后来它发现因为转发路径不正确或者其它原理无法发送邮件,它必须建立一"undeliverable mail"信号,将此信号送到此信的发主者那里。
此信号必须是从此主机的SMTP服务上发出的,当然了,此服务器不应该再报告出错信息的错误。一种阻止这种出错报告循环的情况是在信号的邮件命令的回复路径上置空。在传送此信息时,允许将回复路径也置为空。一个MAIL命令后的回复路径为空表现为如下形式:
MAIL FROM:<>
下例中显示了不可传送的邮件信息。此信息是对从HOSTW上的JOE发出的邮件经过在HOSTX需要经过HOSTZ到达HOSTY时出错的回应。我们看到的例子是在HOSTX和HOSTY之间发生的。
不可传送邮件信息的例子
S: MAIL FROM:<>
R: 250 ok
S: RCPT TO:<@HOSTXARPA:JOE@HOSTWARPA>
R: 250 ok
S: DATA
R: 354 send the mail data,end with
S: Date: 23 Oct 81 11:22:33
S: From: SMTP@HOSTYARPA
S: To: JOE@HOSTW,ARPA
S: Subject: Mail System Problem
S: Sorry JOE,your message to SAM@HOSTZARPA lost
S: HOSTZARPA said this:
S: "550 No Such User"
S:
R: 250 ok
编辑本段常见问题
⒈ SMTP是什么有什么作用答: SMTP是Simple Mail Transfer Protocol的缩写,即简单邮件传输协议,是一种提供有效可靠传送电子邮件的协议,用于在两台邮件服务器间交换邮件
⒉ 邮件服务器间邮件传输使用了TCP协议,为何邮件有时还会丢失
答: 邮件服务器之间的SMTP协议使用TCP连接,可以保证邮件准确无误地在邮件服务器之间传输 但由于邮件服务器本身的故障,例如邮件空间不足等,会导致邮件无法完成传输而导致丢失
⒊ 发件人用户代理为何不直接将邮件发送给收件人的用户代理,而是通过邮件服务器来传输
答: 因为用户电脑性能的限制,无法运行收发邮件的程序,并且无法不间断地运行并连接到互联网上 因此只能将信件暂时存放在邮件服务器中,用户需要时就可以去下载信件
以上就是关于互联网英语词汇全部的内容,包括:互联网英语词汇、Excel 如何用VBA程序得到发件人的邮件地址、如何在python程序中发邮件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)