15 Home
yan edited this page 2024-08-21 06:13:10 -04:00
This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

关于html邮件格式和SMTP协议。

1. 简介 SMTPSimple Mail Transfer Protocol即简单邮件传输协议尽管邮件服务器可以用SMTP发送、接收邮件但是邮件客户端只能用SMTP发送邮件接收邮件一般用IMAP 或者 POP3 。邮件客户端使用TCP的25号端口与服务器通信。 能用SMTP发送邮件接收邮件一般用IMAP 或者 POP3 。邮件客户端使用TCP的25号端口与服务器通信。

SMTP在1982年首次被定义在  RFC 821 在2008它被更新为扩展的SMTP协议补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。
  1. SMTP 模型

    SMTP在1982年首次被定义在 RFC 821 在2008它被更新为扩展的SMTP协议补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。

    SMTP在1982年首次被定义在 RFC 821 在2008它被更新为扩展的SMTP协议补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。

    SMTP在1982年首次被定义在 RFC 821 在2008它被更新为扩展的SMTP协议补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。

`SMTP在1982年首次被定义在 RFC 821 在2008它被更新为扩展的SMTP协议补充在文件 RFC 5321 ,扩展的协议是目前使用最广泛的协议。

  1. SMTP 模型

SMTP被设计基于以下交流模型当用户需要发邮件时候邮件发送者(sender-SMTP)建立一个与邮件接收者(receiver-SMTP)通信的通道发送者发送SMTP命令给接收者接收者收到后对命令做回复。

通信通道被建立后,发送者发送 MAIL 命令来指定发送者的邮件,如果接受者接收这个邮件,就回复 OK ,接着发送者发送 RCPT命令来指定接收者的邮箱如果被接收同样回复OK如果不接受则拒绝不会终止整个通话。接收者邮箱确定后发送者用DATA命令指示要发送数据并用一个 . 结束发送。如果数据被接收会收到OK 然后用QUIT结束会话。

  1. SMTP 步骤 这里有三个步骤对于mail事务第一步用 MAIL 命令给出发送者的身份第二步用一个或者多个RCPT命令给出接收者信息接着用DATA命令给出邮件数据。

第一步是MAIL命令包含发送者邮箱 是空格,是回车换行)

MAIL FROM: 这个命令告诉接收者开始一个新的邮件事务重置所有的状态表和缓存区包括接受者信息和邮件数据被用于报告错误如果命令被接受返回250 OK

第二步是 RCPT命令

RCPT TO: 这个命令提供一个接收者邮箱如果被接受返回250 OK如果不能被识别返回550 Failure这个第二步可以被重复多次。

第三步是 DATA命令

DATA 如果被接受返回354并认为所有后续行都会邮件数据信息。当收到文本结束符时候返回250OK

邮件数据的末尾必须被指明,为了激活命令和回复的对话。通过发送只包含一个英文句号的行,来提示邮件数据结束。

请注意: 邮件数据(mail data)包含邮件头部关键字如Date, Subject, To, Cc, From

下面的例子演示一下这些命令的使用S: send发送Rreply 回复)

S: MAIL FROM:Smith@Alpha.ARPA R: 250 OK S: RCPT TO:Jones@Beta.ARPA R: 250 OK S: RCPT TO:Green@Beta.ARPA R: 550 No such user here S: RCPT TO:Brown@Beta.ARPA R: 250 OK S: DATA R: 354 Start mail input; end with . S: Blah blah blah... S: ...etc. etc. etc. S: . R: 250 OK

Jones and Brown可以收到邮件Green邮箱无效不能收到邮件。

  1. 传输通道的打开与关闭 下面两个命令用于打开关闭传输通道

HELO QUIT HELO命令用主机介绍它自己可以被翻译为"Hello, I am".

  1. SMTP命令汇总

HELO EHLO <domain /address-literal > 新标准用于替换 HELO 命令 MAIL FROM: RCPT TO: DATA RSET SEND FROM: SOML FROM: SAML FROM: VRFY EXPN HELP [ ] NOOP QUIT TURN 命令语义:

SMTP命令由四个不区分大小写的字母组成如果命令带参数则用空格与参数隔开命令用回车换行结尾。

EHLOExtended helloor HELOhello 这个命令用于说明自己是SMTP客户端身份参数包含客户端的域名(domain)。其中EHLO是SMTP补充协议 RFC 5321 中用于替换HELO命令的新命令协议规定服务器支持EHLO命令的时候尽量使用EHLO命令为了兼容以前的版本要求服务器继续支持HELO命令。如果收到回复OK说明发送者和接收者处于初始状态所有的状态表和缓存区都被清零。 MAIL 这个命令的参数是发送者邮箱,参数中有 FROM 关键字这个命令会清空之前的发送者邮箱the reverse-path buffer、接收者邮箱forward-path buffer和邮件数据the mail data buffer。 RCPT recipient 用于指定一个邮件接收者参数中有TO 关键字,指定多个接收者通过重复使用这个命令。 DATA 这个命令没有参数,告诉服务器接着要发送邮件内容。 邮件内容包含邮件标题项message header section 和邮件正文message body 标题项Header Fields 是以项目名field name为行的起点接着是冒号(":")跟着是内容field body以回车换行结束CRLF下面是标题项的例子 From: Bob@example.com To: Alice@example.com Cc: theboss@example.com subject: subject 其中From、To、Cc、subject就是项目名冒号后是内容。邮件的标题区与正文区需要用一个空行隔开。两者共同组成DATA命令的参数正文区用只有一个点字符“.”的单行来结束。 SEND 初始化邮件事务,邮件数据被转发到一个或多个终端。 SOMLSEND OR MAIL) 初始化邮件事务,邮件数据被转发到一个或多个终端或邮箱。 SAMLSEND AND MAIL 初始化邮件事务,邮件数据被转发到一个或多个终端和邮箱。 RSETRESET 这个命令用来终止邮件事务mail transaction任何已经存储的发送者、接收者、邮件数据mail data信息都被丢弃缓存区被清零。 VRFYVERIFY 验证邮箱是否存在,如果参数是用户名,则返回一个全名(如果存在)。 EXPNEXPAND 验证邮箱列表 HELP 返回帮助信息,带参数时候,返回指定的帮助信息。 NOOP 这个命令指示服务器收到命令后不用回复 “OK” QUIT 关闭传输通道。 TURN 交换邮件发送者和接收者的角色这个命令用在建立连接成本高的时候TCP连接不用这个命令。这个命令会产生安全问题只有在服务器可以被授权作为客户端时候才能用。 6. 新标准rfc5321弃用的命令

_Footer{ sfsf sfs s df}